// export waves , timer , freesides , playersides , queue , TeamA , TeamB , apequeue , cureindividual , cureteam , firstres ; starting var i ; begin playersides = [ 1 , 2 ] ;
   0: LD_ADDR_EXP 4
   4: PUSH
   5: LD_INT 1
   7: PUSH
   8: LD_INT 2
  10: PUSH
  11: EMPTY
  12: LIST
  13: LIST
  14: ST_TO_ADDR
// freesides = [ 7 , 8 ] ;
  15: LD_ADDR_EXP 3
  19: PUSH
  20: LD_INT 7
  22: PUSH
  23: LD_INT 8
  25: PUSH
  26: EMPTY
  27: LIST
  28: LIST
  29: ST_TO_ADDR
// TeamA = [ playersides [ 0 ] ] ;
  30: LD_ADDR_EXP 6
  34: PUSH
  35: LD_EXP 4
  39: PUSH
  40: LD_INT 0
  42: ARRAY
  43: PUSH
  44: EMPTY
  45: LIST
  46: ST_TO_ADDR
// TeamB = [ playersides [ 1 ] ] ;
  47: LD_ADDR_EXP 7
  51: PUSH
  52: LD_EXP 4
  56: PUSH
  57: LD_INT 1
  59: ARRAY
  60: PUSH
  61: EMPTY
  62: LIST
  63: ST_TO_ADDR
// firstres = [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ] ;
  64: LD_ADDR_EXP 11
  68: PUSH
  69: LD_INT 1
  71: PUSH
  72: LD_INT 1
  74: PUSH
  75: LD_INT 1
  77: PUSH
  78: LD_INT 1
  80: PUSH
  81: LD_INT 1
  83: PUSH
  84: LD_INT 1
  86: PUSH
  87: LD_INT 1
  89: PUSH
  90: LD_INT 1
  92: PUSH
  93: EMPTY
  94: LIST
  95: LIST
  96: LIST
  97: LIST
  98: LIST
  99: LIST
 100: LIST
 101: LIST
 102: ST_TO_ADDR
// cureteam = [ 0 , 0 ] ;
 103: LD_ADDR_EXP 10
 107: PUSH
 108: LD_INT 0
 110: PUSH
 111: LD_INT 0
 113: PUSH
 114: EMPTY
 115: LIST
 116: LIST
 117: ST_TO_ADDR
// timer = 0 ;
 118: LD_ADDR_EXP 2
 122: PUSH
 123: LD_INT 0
 125: ST_TO_ADDR
// waves = 0 ;
 126: LD_ADDR_EXP 1
 130: PUSH
 131: LD_INT 0
 133: ST_TO_ADDR
// queue = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
 134: LD_ADDR_EXP 5
 138: PUSH
 139: LD_INT 0
 141: PUSH
 142: LD_INT 0
 144: PUSH
 145: LD_INT 0
 147: PUSH
 148: LD_INT 0
 150: PUSH
 151: LD_INT 0
 153: PUSH
 154: LD_INT 0
 156: PUSH
 157: LD_INT 0
 159: PUSH
 160: LD_INT 0
 162: PUSH
 163: EMPTY
 164: LIST
 165: LIST
 166: LIST
 167: LIST
 168: LIST
 169: LIST
 170: LIST
 171: LIST
 172: ST_TO_ADDR
// apequeue = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
 173: LD_ADDR_EXP 8
 177: PUSH
 178: LD_INT 0
 180: PUSH
 181: LD_INT 0
 183: PUSH
 184: LD_INT 0
 186: PUSH
 187: LD_INT 0
 189: PUSH
 190: LD_INT 0
 192: PUSH
 193: LD_INT 0
 195: PUSH
 196: LD_INT 0
 198: PUSH
 199: LD_INT 0
 201: PUSH
 202: EMPTY
 203: LIST
 204: LIST
 205: LIST
 206: LIST
 207: LIST
 208: LIST
 209: LIST
 210: LIST
 211: ST_TO_ADDR
// game_speed = 7 ;
 212: LD_ADDR_OWVAR 65
 216: PUSH
 217: LD_INT 7
 219: ST_TO_ADDR
// RandomizeAll ( ) ;
 220: CALL_OW 11
// if Multiplayer then
 224: LD_OWVAR 4
 228: IFFALSE 440
// begin TeamA = [ ] ;
 230: LD_ADDR_EXP 6
 234: PUSH
 235: EMPTY
 236: ST_TO_ADDR
// TeamB = [ ] ;
 237: LD_ADDR_EXP 7
 241: PUSH
 242: EMPTY
 243: ST_TO_ADDR
// playersides = [ ] ;
 244: LD_ADDR_EXP 4
 248: PUSH
 249: EMPTY
 250: ST_TO_ADDR
// freesides = [ ] ;
 251: LD_ADDR_EXP 3
 255: PUSH
 256: EMPTY
 257: ST_TO_ADDR
// for i = 1 to 8 do
 258: LD_ADDR_VAR 0 1
 262: PUSH
 263: DOUBLE
 264: LD_INT 1
 266: DEC
 267: ST_TO_ADDR
 268: LD_INT 8
 270: PUSH
 271: FOR_TO
 272: IFFALSE 326
// if mp_sides_positions [ i ] <> 0 then
 274: LD_OWVAR 17
 278: PUSH
 279: LD_VAR 0 1
 283: ARRAY
 284: PUSH
 285: LD_INT 0
 287: NONEQUAL
 288: IFFALSE 308
// playersides = playersides ^ i else
 290: LD_ADDR_EXP 4
 294: PUSH
 295: LD_EXP 4
 299: PUSH
 300: LD_VAR 0 1
 304: ADD
 305: ST_TO_ADDR
 306: GO 324
// freesides = freesides ^ i ;
 308: LD_ADDR_EXP 3
 312: PUSH
 313: LD_EXP 3
 317: PUSH
 318: LD_VAR 0 1
 322: ADD
 323: ST_TO_ADDR
 324: GO 271
 326: POP
 327: POP
// for i = 1 to playersides do
 328: LD_ADDR_VAR 0 1
 332: PUSH
 333: DOUBLE
 334: LD_INT 1
 336: DEC
 337: ST_TO_ADDR
 338: LD_EXP 4
 342: PUSH
 343: FOR_TO
 344: IFFALSE 438
// begin if mp_sides_teams [ playersides [ i ] ] = 1 then
 346: LD_OWVAR 15
 350: PUSH
 351: LD_EXP 4
 355: PUSH
 356: LD_VAR 0 1
 360: ARRAY
 361: ARRAY
 362: PUSH
 363: LD_INT 1
 365: EQUAL
 366: IFFALSE 392
// TeamA = TeamA ^ playersides [ i ] else
 368: LD_ADDR_EXP 6
 372: PUSH
 373: LD_EXP 6
 377: PUSH
 378: LD_EXP 4
 382: PUSH
 383: LD_VAR 0 1
 387: ARRAY
 388: ADD
 389: ST_TO_ADDR
 390: GO 436
// if mp_sides_teams [ playersides [ i ] ] = 2 then
 392: LD_OWVAR 15
 396: PUSH
 397: LD_EXP 4
 401: PUSH
 402: LD_VAR 0 1
 406: ARRAY
 407: ARRAY
 408: PUSH
 409: LD_INT 2
 411: EQUAL
 412: IFFALSE 436
// TeamB = TeamB ^ playersides [ i ] ;
 414: LD_ADDR_EXP 7
 418: PUSH
 419: LD_EXP 7
 423: PUSH
 424: LD_EXP 4
 428: PUSH
 429: LD_VAR 0 1
 433: ARRAY
 434: ADD
 435: ST_TO_ADDR
// end ;
 436: GO 343
 438: POP
 439: POP
// end ; start ;
 440: CALL 1114 0 0
// if Multiplayer then
 444: LD_OWVAR 4
 448: IFFALSE 464
// begin Your_Side := mp_player_side ;
 450: LD_ADDR_OWVAR 2
 454: PUSH
 455: LD_OWVAR 7
 459: ST_TO_ADDR
// set_shared_visions_and_alliances ;
 460: CALL 465 0 0
// end ; end ;
 464: END
// export function set_shared_visions_and_alliances ; var i , j , Side_Teams , Team_Game , shared_vision , Teams ; begin
 465: LD_INT 0
 467: PPUSH
 468: PPUSH
 469: PPUSH
 470: PPUSH
 471: PPUSH
 472: PPUSH
 473: PPUSH
// Side_Teams := mp_sides_teams ;
 474: LD_ADDR_VAR 0 4
 478: PUSH
 479: LD_OWVAR 15
 483: ST_TO_ADDR
// Team_Game := ( Side_Teams diff [ 0 ] ) > 1 ;
 484: LD_ADDR_VAR 0 5
 488: PUSH
 489: LD_VAR 0 4
 493: PUSH
 494: LD_INT 0
 496: PUSH
 497: EMPTY
 498: LIST
 499: DIFF
 500: PUSH
 501: LD_INT 1
 503: GREATER
 504: ST_TO_ADDR
// shared_vision := GetMultiplayerSetting ( 10 ) ;
 505: LD_ADDR_VAR 0 6
 509: PUSH
 510: LD_INT 10
 512: PPUSH
 513: CALL_OW 426
 517: ST_TO_ADDR
// Teams := mp_teams ;
 518: LD_ADDR_VAR 0 7
 522: PUSH
 523: LD_OWVAR 12
 527: ST_TO_ADDR
// if not Team_Game then
 528: LD_VAR 0 5
 532: NOT
 533: IFFALSE 631
// begin for i = 1 to 8 do
 535: LD_ADDR_VAR 0 2
 539: PUSH
 540: DOUBLE
 541: LD_INT 1
 543: DEC
 544: ST_TO_ADDR
 545: LD_INT 8
 547: PUSH
 548: FOR_TO
 549: IFFALSE 627
// for j = 1 to 8 do
 551: LD_ADDR_VAR 0 3
 555: PUSH
 556: DOUBLE
 557: LD_INT 1
 559: DEC
 560: ST_TO_ADDR
 561: LD_INT 8
 563: PUSH
 564: FOR_TO
 565: IFFALSE 623
// if i <> j then
 567: LD_VAR 0 2
 571: PUSH
 572: LD_VAR 0 3
 576: NONEQUAL
 577: IFFALSE 601
// SetAttitude ( i , j , att_neutral , true ) else
 579: LD_VAR 0 2
 583: PPUSH
 584: LD_VAR 0 3
 588: PPUSH
 589: LD_INT 0
 591: PPUSH
 592: LD_INT 1
 594: PPUSH
 595: CALL_OW 80
 599: GO 621
// SetAttitude ( i , j , att_friend , true ) ;
 601: LD_VAR 0 2
 605: PPUSH
 606: LD_VAR 0 3
 610: PPUSH
 611: LD_INT 1
 613: PPUSH
 614: LD_INT 1
 616: PPUSH
 617: CALL_OW 80
 621: GO 564
 623: POP
 624: POP
 625: GO 548
 627: POP
 628: POP
// end else
 629: GO 1109
// begin if shared_vision then
 631: LD_VAR 0 6
 635: IFFALSE 859
// begin if mp_game_type = 1 then
 637: LD_OWVAR 6
 641: PUSH
 642: LD_INT 1
 644: EQUAL
 645: IFFALSE 769
// begin for i = 1 to TeamA do
 647: LD_ADDR_VAR 0 2
 651: PUSH
 652: DOUBLE
 653: LD_INT 1
 655: DEC
 656: ST_TO_ADDR
 657: LD_EXP 6
 661: PUSH
 662: FOR_TO
 663: IFFALSE 685
// ChangeSideFog ( TeamA [ i ] , 1 ) ;
 665: LD_EXP 6
 669: PUSH
 670: LD_VAR 0 2
 674: ARRAY
 675: PPUSH
 676: LD_INT 1
 678: PPUSH
 679: CALL_OW 343
 683: GO 662
 685: POP
 686: POP
// for i = 1 to TeamB do
 687: LD_ADDR_VAR 0 2
 691: PUSH
 692: DOUBLE
 693: LD_INT 1
 695: DEC
 696: ST_TO_ADDR
 697: LD_EXP 7
 701: PUSH
 702: FOR_TO
 703: IFFALSE 725
// ChangeSideFog ( TeamB [ i ] , 2 ) ;
 705: LD_EXP 7
 709: PUSH
 710: LD_VAR 0 2
 714: ARRAY
 715: PPUSH
 716: LD_INT 2
 718: PPUSH
 719: CALL_OW 343
 723: GO 702
 725: POP
 726: POP
// for i = 1 to freesides do
 727: LD_ADDR_VAR 0 2
 731: PUSH
 732: DOUBLE
 733: LD_INT 1
 735: DEC
 736: ST_TO_ADDR
 737: LD_EXP 3
 741: PUSH
 742: FOR_TO
 743: IFFALSE 765
// ChangeSideFog ( freesides [ i ] , 3 ) ;
 745: LD_EXP 3
 749: PUSH
 750: LD_VAR 0 2
 754: ARRAY
 755: PPUSH
 756: LD_INT 3
 758: PPUSH
 759: CALL_OW 343
 763: GO 742
 765: POP
 766: POP
// end else
 767: GO 859
// if mp_game_type = 2 then
 769: LD_OWVAR 6
 773: PUSH
 774: LD_INT 2
 776: EQUAL
 777: IFFALSE 859
// begin for i = 1 to playersides do
 779: LD_ADDR_VAR 0 2
 783: PUSH
 784: DOUBLE
 785: LD_INT 1
 787: DEC
 788: ST_TO_ADDR
 789: LD_EXP 4
 793: PUSH
 794: FOR_TO
 795: IFFALSE 817
// ChangeSideFog ( playersides [ i ] , 1 ) ;
 797: LD_EXP 4
 801: PUSH
 802: LD_VAR 0 2
 806: ARRAY
 807: PPUSH
 808: LD_INT 1
 810: PPUSH
 811: CALL_OW 343
 815: GO 794
 817: POP
 818: POP
// for i = 1 to freesides do
 819: LD_ADDR_VAR 0 2
 823: PUSH
 824: DOUBLE
 825: LD_INT 1
 827: DEC
 828: ST_TO_ADDR
 829: LD_EXP 3
 833: PUSH
 834: FOR_TO
 835: IFFALSE 857
// ChangeSideFog ( freesides [ i ] , 2 ) ;
 837: LD_EXP 3
 841: PUSH
 842: LD_VAR 0 2
 846: ARRAY
 847: PPUSH
 848: LD_INT 2
 850: PPUSH
 851: CALL_OW 343
 855: GO 834
 857: POP
 858: POP
// end ; end ; if mp_game_type = 1 then
 859: LD_OWVAR 6
 863: PUSH
 864: LD_INT 1
 866: EQUAL
 867: IFFALSE 1023
// begin for i = 1 to TeamA do
 869: LD_ADDR_VAR 0 2
 873: PUSH
 874: DOUBLE
 875: LD_INT 1
 877: DEC
 878: ST_TO_ADDR
 879: LD_EXP 6
 883: PUSH
 884: FOR_TO
 885: IFFALSE 943
// for j = 1 to TeamA do
 887: LD_ADDR_VAR 0 3
 891: PUSH
 892: DOUBLE
 893: LD_INT 1
 895: DEC
 896: ST_TO_ADDR
 897: LD_EXP 6
 901: PUSH
 902: FOR_TO
 903: IFFALSE 939
// SetAttitude ( TeamA [ i ] , TeamA [ j ] , att_friend , true ) ;
 905: LD_EXP 6
 909: PUSH
 910: LD_VAR 0 2
 914: ARRAY
 915: PPUSH
 916: LD_EXP 6
 920: PUSH
 921: LD_VAR 0 3
 925: ARRAY
 926: PPUSH
 927: LD_INT 1
 929: PPUSH
 930: LD_INT 1
 932: PPUSH
 933: CALL_OW 80
 937: GO 902
 939: POP
 940: POP
 941: GO 884
 943: POP
 944: POP
// for i = 1 to TeamB do
 945: LD_ADDR_VAR 0 2
 949: PUSH
 950: DOUBLE
 951: LD_INT 1
 953: DEC
 954: ST_TO_ADDR
 955: LD_EXP 7
 959: PUSH
 960: FOR_TO
 961: IFFALSE 1019
// for j = 1 to TeamB do
 963: LD_ADDR_VAR 0 3
 967: PUSH
 968: DOUBLE
 969: LD_INT 1
 971: DEC
 972: ST_TO_ADDR
 973: LD_EXP 7
 977: PUSH
 978: FOR_TO
 979: IFFALSE 1015
// SetAttitude ( TeamB [ i ] , TeamB [ j ] , att_friend , true ) ;
 981: LD_EXP 7
 985: PUSH
 986: LD_VAR 0 2
 990: ARRAY
 991: PPUSH
 992: LD_EXP 7
 996: PUSH
 997: LD_VAR 0 3
1001: ARRAY
1002: PPUSH
1003: LD_INT 1
1005: PPUSH
1006: LD_INT 1
1008: PPUSH
1009: CALL_OW 80
1013: GO 978
1015: POP
1016: POP
1017: GO 960
1019: POP
1020: POP
// end else
1021: GO 1109
// if mp_game_type = 2 then
1023: LD_OWVAR 6
1027: PUSH
1028: LD_INT 2
1030: EQUAL
1031: IFFALSE 1109
// for i = 1 to playersides do
1033: LD_ADDR_VAR 0 2
1037: PUSH
1038: DOUBLE
1039: LD_INT 1
1041: DEC
1042: ST_TO_ADDR
1043: LD_EXP 4
1047: PUSH
1048: FOR_TO
1049: IFFALSE 1107
// for j = 1 to playersides do
1051: LD_ADDR_VAR 0 3
1055: PUSH
1056: DOUBLE
1057: LD_INT 1
1059: DEC
1060: ST_TO_ADDR
1061: LD_EXP 4
1065: PUSH
1066: FOR_TO
1067: IFFALSE 1103
// SetAttitude ( playersides [ i ] , playersides [ j ] , att_friend , true ) ;
1069: LD_EXP 4
1073: PUSH
1074: LD_VAR 0 2
1078: ARRAY
1079: PPUSH
1080: LD_EXP 4
1084: PUSH
1085: LD_VAR 0 3
1089: ARRAY
1090: PPUSH
1091: LD_INT 1
1093: PPUSH
1094: LD_INT 1
1096: PPUSH
1097: CALL_OW 80
1101: GO 1066
1103: POP
1104: POP
1105: GO 1048
1107: POP
1108: POP
// end ; end ;
1109: LD_VAR 0 1
1113: RET
// export function start ; var i , l , k , id , cls , pos , n ; begin
1114: LD_INT 0
1116: PPUSH
1117: PPUSH
1118: PPUSH
1119: PPUSH
1120: PPUSH
1121: PPUSH
1122: PPUSH
1123: PPUSH
// pos = [ TopLeft , TopRight , BotLeft , BotRight , CenterLeft , CenterRight ] ;
1124: LD_ADDR_VAR 0 7
1128: PUSH
1129: LD_INT 22
1131: PUSH
1132: LD_INT 23
1134: PUSH
1135: LD_INT 25
1137: PUSH
1138: LD_INT 24
1140: PUSH
1141: LD_INT 30
1143: PUSH
1144: LD_INT 31
1146: PUSH
1147: EMPTY
1148: LIST
1149: LIST
1150: LIST
1151: LIST
1152: LIST
1153: LIST
1154: ST_TO_ADDR
// n = 10 ;
1155: LD_ADDR_VAR 0 8
1159: PUSH
1160: LD_INT 10
1162: ST_TO_ADDR
// cls = [ 1 , 2 , 3 , 4 ] ;
1163: LD_ADDR_VAR 0 6
1167: PUSH
1168: LD_INT 1
1170: PUSH
1171: LD_INT 2
1173: PUSH
1174: LD_INT 3
1176: PUSH
1177: LD_INT 4
1179: PUSH
1180: EMPTY
1181: LIST
1182: LIST
1183: LIST
1184: LIST
1185: ST_TO_ADDR
// if Multiplayer then
1186: LD_OWVAR 4
1190: IFFALSE 1213
// begin n = 7 + GetMultiplayerSetting ( 1 ) * 3 ;
1192: LD_ADDR_VAR 0 8
1196: PUSH
1197: LD_INT 7
1199: PUSH
1200: LD_INT 1
1202: PPUSH
1203: CALL_OW 426
1207: PUSH
1208: LD_INT 3
1210: MUL
1211: PLUS
1212: ST_TO_ADDR
// end ; for l = 1 to playersides do
1213: LD_ADDR_VAR 0 3
1217: PUSH
1218: DOUBLE
1219: LD_INT 1
1221: DEC
1222: ST_TO_ADDR
1223: LD_EXP 4
1227: PUSH
1228: FOR_TO
1229: IFFALSE 1510
// begin uc_side = playersides [ l ] ;
1231: LD_ADDR_OWVAR 20
1235: PUSH
1236: LD_EXP 4
1240: PUSH
1241: LD_VAR 0 3
1245: ARRAY
1246: ST_TO_ADDR
// uc_nation = 0 ;
1247: LD_ADDR_OWVAR 21
1251: PUSH
1252: LD_INT 0
1254: ST_TO_ADDR
// hc_name =  ;
1255: LD_ADDR_OWVAR 26
1259: PUSH
1260: LD_STRING 
1262: ST_TO_ADDR
// hc_class = 12 ;
1263: LD_ADDR_OWVAR 28
1267: PUSH
1268: LD_INT 12
1270: ST_TO_ADDR
// hc_sex = rand ( sex_male , sex_female ) ;
1271: LD_ADDR_OWVAR 27
1275: PUSH
1276: LD_INT 1
1278: PPUSH
1279: LD_INT 2
1281: PPUSH
1282: CALL_OW 12
1286: ST_TO_ADDR
// id = createhuman ;
1287: LD_ADDR_VAR 0 5
1291: PUSH
1292: CALL_OW 44
1296: ST_TO_ADDR
// PlaceUnitArea ( id , pos [ mp_sides_positions [ playersides [ l ] ] ] , false ) ;
1297: LD_VAR 0 5
1301: PPUSH
1302: LD_VAR 0 7
1306: PUSH
1307: LD_OWVAR 17
1311: PUSH
1312: LD_EXP 4
1316: PUSH
1317: LD_VAR 0 3
1321: ARRAY
1322: ARRAY
1323: ARRAY
1324: PPUSH
1325: LD_INT 0
1327: PPUSH
1328: CALL_OW 49
// for i = 1 to n do
1332: LD_ADDR_VAR 0 2
1336: PUSH
1337: DOUBLE
1338: LD_INT 1
1340: DEC
1341: ST_TO_ADDR
1342: LD_VAR 0 8
1346: PUSH
1347: FOR_TO
1348: IFFALSE 1506
// begin uc_side = playersides [ l ] ;
1350: LD_ADDR_OWVAR 20
1354: PUSH
1355: LD_EXP 4
1359: PUSH
1360: LD_VAR 0 3
1364: ARRAY
1365: ST_TO_ADDR
// uc_nation = mp_sides_nations [ playersides [ l ] ] ;
1366: LD_ADDR_OWVAR 21
1370: PUSH
1371: LD_OWVAR 16
1375: PUSH
1376: LD_EXP 4
1380: PUSH
1381: LD_VAR 0 3
1385: ARRAY
1386: ARRAY
1387: ST_TO_ADDR
// hc_name =  ;
1388: LD_ADDR_OWVAR 26
1392: PUSH
1393: LD_STRING 
1395: ST_TO_ADDR
// hc_class = cls [ i mod 5 ] ;
1396: LD_ADDR_OWVAR 28
1400: PUSH
1401: LD_VAR 0 6
1405: PUSH
1406: LD_VAR 0 2
1410: PUSH
1411: LD_INT 5
1413: MOD
1414: ARRAY
1415: ST_TO_ADDR
// hc_sex = rand ( sex_male , sex_female ) ;
1416: LD_ADDR_OWVAR 27
1420: PUSH
1421: LD_INT 1
1423: PPUSH
1424: LD_INT 2
1426: PPUSH
1427: CALL_OW 12
1431: ST_TO_ADDR
// id = createhuman ;
1432: LD_ADDR_VAR 0 5
1436: PUSH
1437: CALL_OW 44
1441: ST_TO_ADDR
// PlaceUnitArea ( id , pos [ mp_sides_positions [ playersides [ l ] ] ] , false ) ;
1442: LD_VAR 0 5
1446: PPUSH
1447: LD_VAR 0 7
1451: PUSH
1452: LD_OWVAR 17
1456: PUSH
1457: LD_EXP 4
1461: PUSH
1462: LD_VAR 0 3
1466: ARRAY
1467: ARRAY
1468: ARRAY
1469: PPUSH
1470: LD_INT 0
1472: PPUSH
1473: CALL_OW 49
// if your_side = playersides [ l ] then
1477: LD_OWVAR 2
1481: PUSH
1482: LD_EXP 4
1486: PUSH
1487: LD_VAR 0 3
1491: ARRAY
1492: EQUAL
1493: IFFALSE 1504
// CenterNowOnUnits ( id ) ;
1495: LD_VAR 0 5
1499: PPUSH
1500: CALL_OW 87
// end ;
1504: GO 1347
1506: POP
1507: POP
// end ;
1508: GO 1228
1510: POP
1511: POP
// PlaceTreesToArea ( Map , [ 21 , 22 , 23 ] , 40 , 30 , 1 ) ;
1512: LD_INT 32
1514: PPUSH
1515: LD_INT 21
1517: PUSH
1518: LD_INT 22
1520: PUSH
1521: LD_INT 23
1523: PUSH
1524: EMPTY
1525: LIST
1526: LIST
1527: LIST
1528: PPUSH
1529: LD_INT 40
1531: PPUSH
1532: LD_INT 30
1534: PPUSH
1535: LD_INT 1
1537: PPUSH
1538: CALL_OW 352
// end ;
1542: LD_VAR 0 1
1546: RET
// every 0 0$01 do var i , k , check , l , m , checktwo , p , z , x ;
1547: GO 1549
1549: DISABLE
1550: LD_INT 0
1552: PPUSH
1553: PPUSH
1554: PPUSH
1555: PPUSH
1556: PPUSH
1557: PPUSH
1558: PPUSH
1559: PPUSH
1560: PPUSH
// begin i = 238 ;
1561: LD_ADDR_VAR 0 1
1565: PUSH
1566: LD_INT 238
1568: ST_TO_ADDR
// k = 99 ;
1569: LD_ADDR_VAR 0 2
1573: PUSH
1574: LD_INT 99
1576: ST_TO_ADDR
// l = 99 ;
1577: LD_ADDR_VAR 0 4
1581: PUSH
1582: LD_INT 99
1584: ST_TO_ADDR
// m = 53 ;
1585: LD_ADDR_VAR 0 5
1589: PUSH
1590: LD_INT 53
1592: ST_TO_ADDR
// p = 0 ;
1593: LD_ADDR_VAR 0 7
1597: PUSH
1598: LD_INT 0
1600: ST_TO_ADDR
// z = 0 ;
1601: LD_ADDR_VAR 0 8
1605: PUSH
1606: LD_INT 0
1608: ST_TO_ADDR
// x = 0 ;
1609: LD_ADDR_VAR 0 9
1613: PUSH
1614: LD_INT 0
1616: ST_TO_ADDR
// check = false ;
1617: LD_ADDR_VAR 0 3
1621: PUSH
1622: LD_STRING false
1624: ST_TO_ADDR
// repeat wait ( 0 0$0.5 ) ;
1625: LD_INT 18
1627: PPUSH
1628: CALL_OW 67
// SetAreaMapShow ( FluApeRight , 2 ) ;
1632: LD_INT 27
1634: PPUSH
1635: LD_INT 2
1637: PPUSH
1638: CALL_OW 424
// SetAreaMapShow ( FluApeLeft , 2 ) ;
1642: LD_INT 26
1644: PPUSH
1645: LD_INT 2
1647: PPUSH
1648: CALL_OW 424
// MoveAreaXY ( FluApeRight , i , k ) ;
1652: LD_INT 27
1654: PPUSH
1655: LD_VAR 0 1
1659: PPUSH
1660: LD_VAR 0 2
1664: PPUSH
1665: CALL_OW 425
// MoveAreaXY ( FluApeLeft , m , l ) ;
1669: LD_INT 26
1671: PPUSH
1672: LD_VAR 0 5
1676: PPUSH
1677: LD_VAR 0 4
1681: PPUSH
1682: CALL_OW 425
// SetAreaMapShow ( TopLCrates , 3 ) ;
1686: LD_INT 9
1688: PPUSH
1689: LD_INT 3
1691: PPUSH
1692: CALL_OW 424
// SetAreaMapShow ( TopRCrates , 3 ) ;
1696: LD_INT 10
1698: PPUSH
1699: LD_INT 3
1701: PPUSH
1702: CALL_OW 424
// SetAreaMapShow ( BotLCrates , 3 ) ;
1706: LD_INT 12
1708: PPUSH
1709: LD_INT 3
1711: PPUSH
1712: CALL_OW 424
// SetAreaMapShow ( BotRCrates , 3 ) ;
1716: LD_INT 13
1718: PPUSH
1719: LD_INT 3
1721: PPUSH
1722: CALL_OW 424
// MoveAreaXY ( TopLCrates , 216 - p , 50 ) ;
1726: LD_INT 9
1728: PPUSH
1729: LD_INT 216
1731: PUSH
1732: LD_VAR 0 7
1736: MINUS
1737: PPUSH
1738: LD_INT 50
1740: PPUSH
1741: CALL_OW 425
// MoveAreaXY ( TopRCrates , 28 + p , 50 ) ;
1745: LD_INT 10
1747: PPUSH
1748: LD_INT 28
1750: PUSH
1751: LD_VAR 0 7
1755: PLUS
1756: PPUSH
1757: LD_INT 50
1759: PPUSH
1760: CALL_OW 425
// MoveAreaXY ( BotLCrates , 266 - p , 150 ) ;
1764: LD_INT 12
1766: PPUSH
1767: LD_INT 266
1769: PUSH
1770: LD_VAR 0 7
1774: MINUS
1775: PPUSH
1776: LD_INT 150
1778: PPUSH
1779: CALL_OW 425
// MoveAreaXY ( BotRCrates , 78 + p , 150 ) ;
1783: LD_INT 13
1785: PPUSH
1786: LD_INT 78
1788: PUSH
1789: LD_VAR 0 7
1793: PLUS
1794: PPUSH
1795: LD_INT 150
1797: PPUSH
1798: CALL_OW 425
// SetAreaMapShow ( TopLOil , 7 ) ;
1802: LD_INT 15
1804: PPUSH
1805: LD_INT 7
1807: PPUSH
1808: CALL_OW 424
// SetAreaMapShow ( TopROil , 7 ) ;
1812: LD_INT 18
1814: PPUSH
1815: LD_INT 7
1817: PPUSH
1818: CALL_OW 424
// SetAreaMapShow ( BotLOil , 7 ) ;
1822: LD_INT 16
1824: PPUSH
1825: LD_INT 7
1827: PPUSH
1828: CALL_OW 424
// SetAreaMapShow ( BotROil , 7 ) ;
1832: LD_INT 19
1834: PPUSH
1835: LD_INT 7
1837: PPUSH
1838: CALL_OW 424
// MoveAreaXY ( TopLOil , 95 - z , 95 - z * 2 ) ;
1842: LD_INT 15
1844: PPUSH
1845: LD_INT 95
1847: PUSH
1848: LD_VAR 0 8
1852: MINUS
1853: PPUSH
1854: LD_INT 95
1856: PUSH
1857: LD_VAR 0 8
1861: PUSH
1862: LD_INT 2
1864: MUL
1865: MINUS
1866: PPUSH
1867: CALL_OW 425
// MoveAreaXY ( TopROil , 195 - z , 95 - z * 2 ) ;
1871: LD_INT 18
1873: PPUSH
1874: LD_INT 195
1876: PUSH
1877: LD_VAR 0 8
1881: MINUS
1882: PPUSH
1883: LD_INT 95
1885: PUSH
1886: LD_VAR 0 8
1890: PUSH
1891: LD_INT 2
1893: MUL
1894: MINUS
1895: PPUSH
1896: CALL_OW 425
// MoveAreaXY ( BotLOil , 100 + z , 105 + z * 2 ) ;
1900: LD_INT 16
1902: PPUSH
1903: LD_INT 100
1905: PUSH
1906: LD_VAR 0 8
1910: PLUS
1911: PPUSH
1912: LD_INT 105
1914: PUSH
1915: LD_VAR 0 8
1919: PUSH
1920: LD_INT 2
1922: MUL
1923: PLUS
1924: PPUSH
1925: CALL_OW 425
// MoveAreaXY ( BotROil , 200 + z , 105 + z * 2 ) ;
1929: LD_INT 19
1931: PPUSH
1932: LD_INT 200
1934: PUSH
1935: LD_VAR 0 8
1939: PLUS
1940: PPUSH
1941: LD_INT 105
1943: PUSH
1944: LD_VAR 0 8
1948: PUSH
1949: LD_INT 2
1951: MUL
1952: PLUS
1953: PPUSH
1954: CALL_OW 425
// SetAreaMapShow ( BotSib , 5 ) ;
1958: LD_INT 20
1960: PPUSH
1961: LD_INT 5
1963: PPUSH
1964: CALL_OW 424
// SetAreaMapShow ( TopSib , 5 ) ;
1968: LD_INT 21
1970: PPUSH
1971: LD_INT 5
1973: PPUSH
1974: CALL_OW 424
// MoveAreaXY ( TopSib , 100 + x , 1 + x * 2 ) ;
1978: LD_INT 21
1980: PPUSH
1981: LD_INT 100
1983: PUSH
1984: LD_VAR 0 9
1988: PLUS
1989: PPUSH
1990: LD_INT 1
1992: PUSH
1993: LD_VAR 0 9
1997: PUSH
1998: LD_INT 2
2000: MUL
2001: PLUS
2002: PPUSH
2003: CALL_OW 425
// MoveAreaXY ( BotSib , 194 - x , 193 - x * 2 ) ;
2007: LD_INT 20
2009: PPUSH
2010: LD_INT 194
2012: PUSH
2013: LD_VAR 0 9
2017: MINUS
2018: PPUSH
2019: LD_INT 193
2021: PUSH
2022: LD_VAR 0 9
2026: PUSH
2027: LD_INT 2
2029: MUL
2030: MINUS
2031: PPUSH
2032: CALL_OW 425
// if m = 238 and l = 99 then
2036: LD_VAR 0 5
2040: PUSH
2041: LD_INT 238
2043: EQUAL
2044: PUSH
2045: LD_VAR 0 4
2049: PUSH
2050: LD_INT 99
2052: EQUAL
2053: AND
2054: IFFALSE 2072
// begin m = 53 ;
2056: LD_ADDR_VAR 0 5
2060: PUSH
2061: LD_INT 53
2063: ST_TO_ADDR
// l = 99 ;
2064: LD_ADDR_VAR 0 4
2068: PUSH
2069: LD_INT 99
2071: ST_TO_ADDR
// end ; if m < 147 and not check = true then
2072: LD_VAR 0 5
2076: PUSH
2077: LD_INT 147
2079: LESS
2080: PUSH
2081: LD_VAR 0 3
2085: PUSH
2086: LD_STRING true
2088: EQUAL
2089: NOT
2090: AND
2091: IFFALSE 2109
// m = m + 1 else
2093: LD_ADDR_VAR 0 5
2097: PUSH
2098: LD_VAR 0 5
2102: PUSH
2103: LD_INT 1
2105: PLUS
2106: ST_TO_ADDR
2107: GO 2145
// begin checktwo = true ;
2109: LD_ADDR_VAR 0 6
2113: PUSH
2114: LD_STRING true
2116: ST_TO_ADDR
// l = l + 1 ;
2117: LD_ADDR_VAR 0 4
2121: PUSH
2122: LD_VAR 0 4
2126: PUSH
2127: LD_INT 1
2129: PLUS
2130: ST_TO_ADDR
// m = m + 1 ;
2131: LD_ADDR_VAR 0 5
2135: PUSH
2136: LD_VAR 0 5
2140: PUSH
2141: LD_INT 1
2143: PLUS
2144: ST_TO_ADDR
// end ; if l > 8 and not check = true then
2145: LD_VAR 0 4
2149: PUSH
2150: LD_INT 8
2152: GREATER
2153: PUSH
2154: LD_VAR 0 3
2158: PUSH
2159: LD_STRING true
2161: EQUAL
2162: NOT
2163: AND
2164: IFFALSE 2180
// l = l - 1 ;
2166: LD_ADDR_VAR 0 4
2170: PUSH
2171: LD_VAR 0 4
2175: PUSH
2176: LD_INT 1
2178: MINUS
2179: ST_TO_ADDR
// if k = 100 and i = 62 then
2180: LD_VAR 0 2
2184: PUSH
2185: LD_INT 100
2187: EQUAL
2188: PUSH
2189: LD_VAR 0 1
2193: PUSH
2194: LD_INT 62
2196: EQUAL
2197: AND
2198: IFFALSE 2224
// begin i = 238 ;
2200: LD_ADDR_VAR 0 1
2204: PUSH
2205: LD_INT 238
2207: ST_TO_ADDR
// k = 99 ;
2208: LD_ADDR_VAR 0 2
2212: PUSH
2213: LD_INT 99
2215: ST_TO_ADDR
// check = false ;
2216: LD_ADDR_VAR 0 3
2220: PUSH
2221: LD_STRING false
2223: ST_TO_ADDR
// end ; if i > 154 and not check = true then
2224: LD_VAR 0 1
2228: PUSH
2229: LD_INT 154
2231: GREATER
2232: PUSH
2233: LD_VAR 0 3
2237: PUSH
2238: LD_STRING true
2240: EQUAL
2241: NOT
2242: AND
2243: IFFALSE 2259
// i = i - 1 ;
2245: LD_ADDR_VAR 0 1
2249: PUSH
2250: LD_VAR 0 1
2254: PUSH
2255: LD_INT 1
2257: MINUS
2258: ST_TO_ADDR
// if k < 192 and not check = true then
2259: LD_VAR 0 2
2263: PUSH
2264: LD_INT 192
2266: LESS
2267: PUSH
2268: LD_VAR 0 3
2272: PUSH
2273: LD_STRING true
2275: EQUAL
2276: NOT
2277: AND
2278: IFFALSE 2296
// k = k + 1 else
2280: LD_ADDR_VAR 0 2
2284: PUSH
2285: LD_VAR 0 2
2289: PUSH
2290: LD_INT 1
2292: PLUS
2293: ST_TO_ADDR
2294: GO 2332
// begin check = true ;
2296: LD_ADDR_VAR 0 3
2300: PUSH
2301: LD_STRING true
2303: ST_TO_ADDR
// k = k - 1 ;
2304: LD_ADDR_VAR 0 2
2308: PUSH
2309: LD_VAR 0 2
2313: PUSH
2314: LD_INT 1
2316: MINUS
2317: ST_TO_ADDR
// i = i - 1 ;
2318: LD_ADDR_VAR 0 1
2322: PUSH
2323: LD_VAR 0 1
2327: PUSH
2328: LD_INT 1
2330: MINUS
2331: ST_TO_ADDR
// end ; if p = 190 then
2332: LD_VAR 0 7
2336: PUSH
2337: LD_INT 190
2339: EQUAL
2340: IFFALSE 2350
// p = 0 ;
2342: LD_ADDR_VAR 0 7
2346: PUSH
2347: LD_INT 0
2349: ST_TO_ADDR
// p = p + 1 ;
2350: LD_ADDR_VAR 0 7
2354: PUSH
2355: LD_VAR 0 7
2359: PUSH
2360: LD_INT 1
2362: PLUS
2363: ST_TO_ADDR
// if z = 46 then
2364: LD_VAR 0 8
2368: PUSH
2369: LD_INT 46
2371: EQUAL
2372: IFFALSE 2382
// z = 0 ;
2374: LD_ADDR_VAR 0 8
2378: PUSH
2379: LD_INT 0
2381: ST_TO_ADDR
// z = z + 1 ;
2382: LD_ADDR_VAR 0 8
2386: PUSH
2387: LD_VAR 0 8
2391: PUSH
2392: LD_INT 1
2394: PLUS
2395: ST_TO_ADDR
// if x = 34 then
2396: LD_VAR 0 9
2400: PUSH
2401: LD_INT 34
2403: EQUAL
2404: IFFALSE 2414
// x = 0 ;
2406: LD_ADDR_VAR 0 9
2410: PUSH
2411: LD_INT 0
2413: ST_TO_ADDR
// x = x + 1 ;
2414: LD_ADDR_VAR 0 9
2418: PUSH
2419: LD_VAR 0 9
2423: PUSH
2424: LD_INT 1
2426: PLUS
2427: ST_TO_ADDR
// until i = 400 end ;
2428: LD_VAR 0 1
2432: PUSH
2433: LD_INT 400
2435: EQUAL
2436: IFFALSE 1625
2438: PPOPN 9
2440: END
// every 0 0$30 do
2441: GO 2443
2443: DISABLE
// begin waves = 0 ;
2444: LD_ADDR_EXP 1
2448: PUSH
2449: LD_INT 0
2451: ST_TO_ADDR
// repeat waves = waves + 1 ;
2452: LD_ADDR_EXP 1
2456: PUSH
2457: LD_EXP 1
2461: PUSH
2462: LD_INT 1
2464: PLUS
2465: ST_TO_ADDR
// wait ( 0 0$30 ) ;
2466: LD_INT 1050
2468: PPUSH
2469: CALL_OW 67
// until waves = 10000000 ;
2473: LD_EXP 1
2477: PUSH
2478: LD_INT 10000000
2480: EQUAL
2481: IFFALSE 2452
// end ;
2483: END
// every 0 0$03 do var i , j , techs , midtechs , latetechs ;
2484: GO 2486
2486: DISABLE
2487: LD_INT 0
2489: PPUSH
2490: PPUSH
2491: PPUSH
2492: PPUSH
2493: PPUSH
// begin techs = [ 32 , 27 , 36 , 66 , 57 , 69 , 39 , 54 , 63 , 48 , 51 , 60 ] ;
2494: LD_ADDR_VAR 0 3
2498: PUSH
2499: LD_INT 32
2501: PUSH
2502: LD_INT 27
2504: PUSH
2505: LD_INT 36
2507: PUSH
2508: LD_INT 66
2510: PUSH
2511: LD_INT 57
2513: PUSH
2514: LD_INT 69
2516: PUSH
2517: LD_INT 39
2519: PUSH
2520: LD_INT 54
2522: PUSH
2523: LD_INT 63
2525: PUSH
2526: LD_INT 48
2528: PUSH
2529: LD_INT 51
2531: PUSH
2532: LD_INT 60
2534: PUSH
2535: EMPTY
2536: LIST
2537: LIST
2538: LIST
2539: LIST
2540: LIST
2541: LIST
2542: LIST
2543: LIST
2544: LIST
2545: LIST
2546: LIST
2547: LIST
2548: ST_TO_ADDR
// midtechs = [ 67 , 58 , 55 , 64 , 49 , 52 , 61 , 43 ] ;
2549: LD_ADDR_VAR 0 4
2553: PUSH
2554: LD_INT 67
2556: PUSH
2557: LD_INT 58
2559: PUSH
2560: LD_INT 55
2562: PUSH
2563: LD_INT 64
2565: PUSH
2566: LD_INT 49
2568: PUSH
2569: LD_INT 52
2571: PUSH
2572: LD_INT 61
2574: PUSH
2575: LD_INT 43
2577: PUSH
2578: EMPTY
2579: LIST
2580: LIST
2581: LIST
2582: LIST
2583: LIST
2584: LIST
2585: LIST
2586: LIST
2587: ST_TO_ADDR
// latetechs = [ 40 , 71 , 68 , 59 , 31 , 56 , 26 , 29 , 65 , 5 , 30 , 28 , 50 , 53 , 33 , 62 ] ;
2588: LD_ADDR_VAR 0 5
2592: PUSH
2593: LD_INT 40
2595: PUSH
2596: LD_INT 71
2598: PUSH
2599: LD_INT 68
2601: PUSH
2602: LD_INT 59
2604: PUSH
2605: LD_INT 31
2607: PUSH
2608: LD_INT 56
2610: PUSH
2611: LD_INT 26
2613: PUSH
2614: LD_INT 29
2616: PUSH
2617: LD_INT 65
2619: PUSH
2620: LD_INT 5
2622: PUSH
2623: LD_INT 30
2625: PUSH
2626: LD_INT 28
2628: PUSH
2629: LD_INT 50
2631: PUSH
2632: LD_INT 53
2634: PUSH
2635: LD_INT 33
2637: PUSH
2638: LD_INT 62
2640: PUSH
2641: EMPTY
2642: LIST
2643: LIST
2644: LIST
2645: LIST
2646: LIST
2647: LIST
2648: LIST
2649: LIST
2650: LIST
2651: LIST
2652: LIST
2653: LIST
2654: LIST
2655: LIST
2656: LIST
2657: LIST
2658: ST_TO_ADDR
// if waves = 20 then
2659: LD_EXP 1
2663: PUSH
2664: LD_INT 20
2666: EQUAL
2667: IFFALSE 2742
// begin for i = 1 to freesides do
2669: LD_ADDR_VAR 0 1
2673: PUSH
2674: DOUBLE
2675: LD_INT 1
2677: DEC
2678: ST_TO_ADDR
2679: LD_EXP 3
2683: PUSH
2684: FOR_TO
2685: IFFALSE 2740
// for j = 0 to techs do
2687: LD_ADDR_VAR 0 2
2691: PUSH
2692: DOUBLE
2693: LD_INT 0
2695: DEC
2696: ST_TO_ADDR
2697: LD_VAR 0 3
2701: PUSH
2702: FOR_TO
2703: IFFALSE 2736
// SetTech ( techs [ j ] , freesides [ i ] , 2 ) ;
2705: LD_VAR 0 3
2709: PUSH
2710: LD_VAR 0 2
2714: ARRAY
2715: PPUSH
2716: LD_EXP 3
2720: PUSH
2721: LD_VAR 0 1
2725: ARRAY
2726: PPUSH
2727: LD_INT 2
2729: PPUSH
2730: CALL_OW 322
2734: GO 2702
2736: POP
2737: POP
2738: GO 2684
2740: POP
2741: POP
// end ; if waves = 30 then
2742: LD_EXP 1
2746: PUSH
2747: LD_INT 30
2749: EQUAL
2750: IFFALSE 2825
// begin for i = 1 to freesides do
2752: LD_ADDR_VAR 0 1
2756: PUSH
2757: DOUBLE
2758: LD_INT 1
2760: DEC
2761: ST_TO_ADDR
2762: LD_EXP 3
2766: PUSH
2767: FOR_TO
2768: IFFALSE 2823
// for j = 0 to midtechs do
2770: LD_ADDR_VAR 0 2
2774: PUSH
2775: DOUBLE
2776: LD_INT 0
2778: DEC
2779: ST_TO_ADDR
2780: LD_VAR 0 4
2784: PUSH
2785: FOR_TO
2786: IFFALSE 2819
// SetTech ( midtechs [ j ] , freesides [ i ] , 2 ) ;
2788: LD_VAR 0 4
2792: PUSH
2793: LD_VAR 0 2
2797: ARRAY
2798: PPUSH
2799: LD_EXP 3
2803: PUSH
2804: LD_VAR 0 1
2808: ARRAY
2809: PPUSH
2810: LD_INT 2
2812: PPUSH
2813: CALL_OW 322
2817: GO 2785
2819: POP
2820: POP
2821: GO 2767
2823: POP
2824: POP
// end ; if waves = 40 then
2825: LD_EXP 1
2829: PUSH
2830: LD_INT 40
2832: EQUAL
2833: IFFALSE 2910
// begin for i = 1 to freesides do
2835: LD_ADDR_VAR 0 1
2839: PUSH
2840: DOUBLE
2841: LD_INT 1
2843: DEC
2844: ST_TO_ADDR
2845: LD_EXP 3
2849: PUSH
2850: FOR_TO
2851: IFFALSE 2906
// for j = 0 to latetechs do
2853: LD_ADDR_VAR 0 2
2857: PUSH
2858: DOUBLE
2859: LD_INT 0
2861: DEC
2862: ST_TO_ADDR
2863: LD_VAR 0 5
2867: PUSH
2868: FOR_TO
2869: IFFALSE 2902
// SetTech ( latetechs [ j ] , freesides [ i ] , 2 ) ;
2871: LD_VAR 0 5
2875: PUSH
2876: LD_VAR 0 2
2880: ARRAY
2881: PPUSH
2882: LD_EXP 3
2886: PUSH
2887: LD_VAR 0 1
2891: ARRAY
2892: PPUSH
2893: LD_INT 2
2895: PPUSH
2896: CALL_OW 322
2900: GO 2868
2902: POP
2903: POP
2904: GO 2850
2906: POP
2907: POP
// exit ;
2908: GO 2911
// end ; enable ;
2910: ENABLE
// end ;
2911: PPOPN 5
2913: END
// every 0 0$30 do var i , time , skill , id , l , speed ;
2914: GO 2916
2916: DISABLE
2917: LD_INT 0
2919: PPUSH
2920: PPUSH
2921: PPUSH
2922: PPUSH
2923: PPUSH
2924: PPUSH
// begin i = 0 ;
2925: LD_ADDR_VAR 0 1
2929: PUSH
2930: LD_INT 0
2932: ST_TO_ADDR
// repeat i = waves ;
2933: LD_ADDR_VAR 0 1
2937: PUSH
2938: LD_EXP 1
2942: ST_TO_ADDR
// speed = 6 + ( i / 3 ) ;
2943: LD_ADDR_VAR 0 6
2947: PUSH
2948: LD_INT 6
2950: PUSH
2951: LD_VAR 0 1
2955: PUSH
2956: LD_INT 3
2958: DIVREAL
2959: PLUS
2960: ST_TO_ADDR
// time = 0 0$30 ;
2961: LD_ADDR_VAR 0 2
2965: PUSH
2966: LD_INT 1050
2968: ST_TO_ADDR
// skill = ( i / 6 ) mod 11 ;
2969: LD_ADDR_VAR 0 3
2973: PUSH
2974: LD_VAR 0 1
2978: PUSH
2979: LD_INT 6
2981: DIVREAL
2982: PUSH
2983: LD_INT 11
2985: MOD
2986: ST_TO_ADDR
// if speed > 80 then
2987: LD_VAR 0 6
2991: PUSH
2992: LD_INT 80
2994: GREATER
2995: IFFALSE 3005
// speed = 80 ;
2997: LD_ADDR_VAR 0 6
3001: PUSH
3002: LD_INT 80
3004: ST_TO_ADDR
// if i > 110 then
3005: LD_VAR 0 1
3009: PUSH
3010: LD_INT 110
3012: GREATER
3013: IFFALSE 3023
// skill = 15 ;
3015: LD_ADDR_VAR 0 3
3019: PUSH
3020: LD_INT 15
3022: ST_TO_ADDR
// uc_side = freesides [ 1 ] ;
3023: LD_ADDR_OWVAR 20
3027: PUSH
3028: LD_EXP 3
3032: PUSH
3033: LD_INT 1
3035: ARRAY
3036: ST_TO_ADDR
// hc_class = 12 ;
3037: LD_ADDR_OWVAR 28
3041: PUSH
3042: LD_INT 12
3044: ST_TO_ADDR
// hc_skills = [ skill , skill , skill , skill ] ;
3045: LD_ADDR_OWVAR 31
3049: PUSH
3050: LD_VAR 0 3
3054: PUSH
3055: LD_VAR 0 3
3059: PUSH
3060: LD_VAR 0 3
3064: PUSH
3065: LD_VAR 0 3
3069: PUSH
3070: EMPTY
3071: LIST
3072: LIST
3073: LIST
3074: LIST
3075: ST_TO_ADDR
// hc_name =  ;
3076: LD_ADDR_OWVAR 26
3080: PUSH
3081: LD_STRING 
3083: ST_TO_ADDR
// hc_sex = rand ( sex_male , sex_female ) ;
3084: LD_ADDR_OWVAR 27
3088: PUSH
3089: LD_INT 1
3091: PPUSH
3092: LD_INT 2
3094: PPUSH
3095: CALL_OW 12
3099: ST_TO_ADDR
// if i < 25 then
3100: LD_VAR 0 1
3104: PUSH
3105: LD_INT 25
3107: LESS
3108: IFFALSE 3236
// for l = 0 to 1 + i mod 4 do
3110: LD_ADDR_VAR 0 5
3114: PUSH
3115: DOUBLE
3116: LD_INT 0
3118: DEC
3119: ST_TO_ADDR
3120: LD_INT 1
3122: PUSH
3123: LD_VAR 0 1
3127: PUSH
3128: LD_INT 4
3130: MOD
3131: PLUS
3132: PUSH
3133: FOR_TO
3134: IFFALSE 3234
// begin if l > 7 then
3136: LD_VAR 0 5
3140: PUSH
3141: LD_INT 7
3143: GREATER
3144: IFFALSE 3148
// break ;
3146: GO 3234
// id = createhuman ;
3148: LD_ADDR_VAR 0 4
3152: PUSH
3153: CALL_OW 44
3157: ST_TO_ADDR
// PlaceUnitArea ( id , FluApeLeft , false ) ;
3158: LD_VAR 0 4
3162: PPUSH
3163: LD_INT 26
3165: PPUSH
3166: LD_INT 0
3168: PPUSH
3169: CALL_OW 49
// SetAttr ( id , attr_speed , speed ) ;
3173: LD_VAR 0 4
3177: PPUSH
3178: LD_INT 2
3180: PPUSH
3181: LD_VAR 0 6
3185: PPUSH
3186: CALL_OW 239
// id = createhuman ;
3190: LD_ADDR_VAR 0 4
3194: PUSH
3195: CALL_OW 44
3199: ST_TO_ADDR
// PlaceUnitArea ( id , FluApeRight , false ) ;
3200: LD_VAR 0 4
3204: PPUSH
3205: LD_INT 27
3207: PPUSH
3208: LD_INT 0
3210: PPUSH
3211: CALL_OW 49
// SetAttr ( id , attr_speed , speed ) ;
3215: LD_VAR 0 4
3219: PPUSH
3220: LD_INT 2
3222: PPUSH
3223: LD_VAR 0 6
3227: PPUSH
3228: CALL_OW 239
// end ;
3232: GO 3133
3234: POP
3235: POP
// if i > 10 and i < 55 then
3236: LD_VAR 0 1
3240: PUSH
3241: LD_INT 10
3243: GREATER
3244: PUSH
3245: LD_VAR 0 1
3249: PUSH
3250: LD_INT 55
3252: LESS
3253: AND
3254: IFFALSE 3398
// for l = 0 to 1 + i mod 6 do
3256: LD_ADDR_VAR 0 5
3260: PUSH
3261: DOUBLE
3262: LD_INT 0
3264: DEC
3265: ST_TO_ADDR
3266: LD_INT 1
3268: PUSH
3269: LD_VAR 0 1
3273: PUSH
3274: LD_INT 6
3276: MOD
3277: PLUS
3278: PUSH
3279: FOR_TO
3280: IFFALSE 3396
// begin if l > 8 then
3282: LD_VAR 0 5
3286: PUSH
3287: LD_INT 8
3289: GREATER
3290: IFFALSE 3294
// break ;
3292: GO 3396
// hc_class = 16 ;
3294: LD_ADDR_OWVAR 28
3298: PUSH
3299: LD_INT 16
3301: ST_TO_ADDR
// id = createhuman ;
3302: LD_ADDR_VAR 0 4
3306: PUSH
3307: CALL_OW 44
3311: ST_TO_ADDR
// PlaceUnitArea ( id , FluApeLeft , false ) ;
3312: LD_VAR 0 4
3316: PPUSH
3317: LD_INT 26
3319: PPUSH
3320: LD_INT 0
3322: PPUSH
3323: CALL_OW 49
// SetAttr ( id , attr_speed , speed + 1 ) ;
3327: LD_VAR 0 4
3331: PPUSH
3332: LD_INT 2
3334: PPUSH
3335: LD_VAR 0 6
3339: PUSH
3340: LD_INT 1
3342: PLUS
3343: PPUSH
3344: CALL_OW 239
// id = createhuman ;
3348: LD_ADDR_VAR 0 4
3352: PUSH
3353: CALL_OW 44
3357: ST_TO_ADDR
// PlaceUnitArea ( id , FluApeRight , false ) ;
3358: LD_VAR 0 4
3362: PPUSH
3363: LD_INT 27
3365: PPUSH
3366: LD_INT 0
3368: PPUSH
3369: CALL_OW 49
// SetAttr ( id , attr_speed , speed + 1 ) ;
3373: LD_VAR 0 4
3377: PPUSH
3378: LD_INT 2
3380: PPUSH
3381: LD_VAR 0 6
3385: PUSH
3386: LD_INT 1
3388: PLUS
3389: PPUSH
3390: CALL_OW 239
// end ;
3394: GO 3279
3396: POP
3397: POP
// if i > 55 then
3398: LD_VAR 0 1
3402: PUSH
3403: LD_INT 55
3405: GREATER
3406: IFFALSE 3550
// for l = 0 to 1 + i mod 10 do
3408: LD_ADDR_VAR 0 5
3412: PUSH
3413: DOUBLE
3414: LD_INT 0
3416: DEC
3417: ST_TO_ADDR
3418: LD_INT 1
3420: PUSH
3421: LD_VAR 0 1
3425: PUSH
3426: LD_INT 10
3428: MOD
3429: PLUS
3430: PUSH
3431: FOR_TO
3432: IFFALSE 3548
// begin if l > 12 then
3434: LD_VAR 0 5
3438: PUSH
3439: LD_INT 12
3441: GREATER
3442: IFFALSE 3446
// break ;
3444: GO 3548
// hc_class = 15 ;
3446: LD_ADDR_OWVAR 28
3450: PUSH
3451: LD_INT 15
3453: ST_TO_ADDR
// id = createhuman ;
3454: LD_ADDR_VAR 0 4
3458: PUSH
3459: CALL_OW 44
3463: ST_TO_ADDR
// PlaceUnitArea ( id , FluApeLeft , false ) ;
3464: LD_VAR 0 4
3468: PPUSH
3469: LD_INT 26
3471: PPUSH
3472: LD_INT 0
3474: PPUSH
3475: CALL_OW 49
// SetAttr ( id , attr_speed , speed + 2 ) ;
3479: LD_VAR 0 4
3483: PPUSH
3484: LD_INT 2
3486: PPUSH
3487: LD_VAR 0 6
3491: PUSH
3492: LD_INT 2
3494: PLUS
3495: PPUSH
3496: CALL_OW 239
// id = createhuman ;
3500: LD_ADDR_VAR 0 4
3504: PUSH
3505: CALL_OW 44
3509: ST_TO_ADDR
// PlaceUnitArea ( id , FluApeRight , false ) ;
3510: LD_VAR 0 4
3514: PPUSH
3515: LD_INT 27
3517: PPUSH
3518: LD_INT 0
3520: PPUSH
3521: CALL_OW 49
// SetAttr ( id , attr_speed , speed + 2 ) ;
3525: LD_VAR 0 4
3529: PPUSH
3530: LD_INT 2
3532: PPUSH
3533: LD_VAR 0 6
3537: PUSH
3538: LD_INT 2
3540: PLUS
3541: PPUSH
3542: CALL_OW 239
// end ;
3546: GO 3431
3548: POP
3549: POP
// if i > 70 then
3550: LD_VAR 0 1
3554: PUSH
3555: LD_INT 70
3557: GREATER
3558: IFFALSE 3698
// for l = 3 to i mod 10 do
3560: LD_ADDR_VAR 0 5
3564: PUSH
3565: DOUBLE
3566: LD_INT 3
3568: DEC
3569: ST_TO_ADDR
3570: LD_VAR 0 1
3574: PUSH
3575: LD_INT 10
3577: MOD
3578: PUSH
3579: FOR_TO
3580: IFFALSE 3696
// begin if l > 9 then
3582: LD_VAR 0 5
3586: PUSH
3587: LD_INT 9
3589: GREATER
3590: IFFALSE 3594
// break ;
3592: GO 3696
// hc_class = 17 ;
3594: LD_ADDR_OWVAR 28
3598: PUSH
3599: LD_INT 17
3601: ST_TO_ADDR
// id = createhuman ;
3602: LD_ADDR_VAR 0 4
3606: PUSH
3607: CALL_OW 44
3611: ST_TO_ADDR
// PlaceUnitArea ( id , FluApeLeft , false ) ;
3612: LD_VAR 0 4
3616: PPUSH
3617: LD_INT 26
3619: PPUSH
3620: LD_INT 0
3622: PPUSH
3623: CALL_OW 49
// SetAttr ( id , attr_speed , speed - 25 ) ;
3627: LD_VAR 0 4
3631: PPUSH
3632: LD_INT 2
3634: PPUSH
3635: LD_VAR 0 6
3639: PUSH
3640: LD_INT 25
3642: MINUS
3643: PPUSH
3644: CALL_OW 239
// id = createhuman ;
3648: LD_ADDR_VAR 0 4
3652: PUSH
3653: CALL_OW 44
3657: ST_TO_ADDR
// PlaceUnitArea ( id , FluApeRight , false ) ;
3658: LD_VAR 0 4
3662: PPUSH
3663: LD_INT 27
3665: PPUSH
3666: LD_INT 0
3668: PPUSH
3669: CALL_OW 49
// SetAttr ( id , attr_speed , speed - 25 ) ;
3673: LD_VAR 0 4
3677: PPUSH
3678: LD_INT 2
3680: PPUSH
3681: LD_VAR 0 6
3685: PUSH
3686: LD_INT 25
3688: MINUS
3689: PPUSH
3690: CALL_OW 239
// end ;
3694: GO 3579
3696: POP
3697: POP
// wait ( time ) ;
3698: LD_VAR 0 2
3702: PPUSH
3703: CALL_OW 67
// until i = 1000000 end ;
3707: LD_VAR 0 1
3711: PUSH
3712: LD_INT 1000000
3714: EQUAL
3715: IFFALSE 2933
3717: PPOPN 6
3719: END
// every 0 0$25 do var time , i ;
3720: GO 3722
3722: DISABLE
3723: LD_INT 0
3725: PPUSH
3726: PPUSH
// begin time = rand ( 0 0$05 , 0 0$25 ) ;
3727: LD_ADDR_VAR 0 1
3731: PUSH
3732: LD_INT 175
3734: PPUSH
3735: LD_INT 875
3737: PPUSH
3738: CALL_OW 12
3742: ST_TO_ADDR
// wait ( time ) ;
3743: LD_VAR 0 1
3747: PPUSH
3748: CALL_OW 67
// CreateCratesArea ( 3 , TopRCrates , true ) ;
3752: LD_INT 3
3754: PPUSH
3755: LD_INT 10
3757: PPUSH
3758: LD_INT 1
3760: PPUSH
3761: CALL_OW 55
// CreateCratesArea ( 3 , TopLCrates , true ) ;
3765: LD_INT 3
3767: PPUSH
3768: LD_INT 9
3770: PPUSH
3771: LD_INT 1
3773: PPUSH
3774: CALL_OW 55
// CreateCratesArea ( 3 , BotRCrates , true ) ;
3778: LD_INT 3
3780: PPUSH
3781: LD_INT 13
3783: PPUSH
3784: LD_INT 1
3786: PPUSH
3787: CALL_OW 55
// CreateCratesArea ( 3 , BotLCrates , true ) ;
3791: LD_INT 3
3793: PPUSH
3794: LD_INT 12
3796: PPUSH
3797: LD_INT 1
3799: PPUSH
3800: CALL_OW 55
// wait ( 0 0$35 - time ) ;
3804: LD_INT 1225
3806: PUSH
3807: LD_VAR 0 1
3811: MINUS
3812: PPUSH
3813: CALL_OW 67
// enable ;
3817: ENABLE
// end ;
3818: PPOPN 2
3820: END
// every 2 2$30 do var time ;
3821: GO 3823
3823: DISABLE
3824: LD_INT 0
3826: PPUSH
// begin time = rand ( 0 0$05 , 0 0$25 ) ;
3827: LD_ADDR_VAR 0 1
3831: PUSH
3832: LD_INT 175
3834: PPUSH
3835: LD_INT 875
3837: PPUSH
3838: CALL_OW 12
3842: ST_TO_ADDR
// wait ( time ) ;
3843: LD_VAR 0 1
3847: PPUSH
3848: CALL_OW 67
// CreateResourcesArea ( Mat_siberit , 1 , BotSib , true ) ;
3852: LD_INT 3
3854: PPUSH
3855: LD_INT 1
3857: PPUSH
3858: LD_INT 20
3860: PPUSH
3861: LD_INT 1
3863: PPUSH
3864: CALL_OW 59
// CreateResourcesArea ( Mat_siberit , 1 , TopSib , true ) ;
3868: LD_INT 3
3870: PPUSH
3871: LD_INT 1
3873: PPUSH
3874: LD_INT 21
3876: PPUSH
3877: LD_INT 1
3879: PPUSH
3880: CALL_OW 59
// wait ( 0 0$30 - time ) ;
3884: LD_INT 1050
3886: PUSH
3887: LD_VAR 0 1
3891: MINUS
3892: PPUSH
3893: CALL_OW 67
// enable ;
3897: ENABLE
// end ;
3898: PPOPN 1
3900: END
// every 0 0$45 do var time ;
3901: GO 3903
3903: DISABLE
3904: LD_INT 0
3906: PPUSH
// begin time = rand ( 0 0$01 , 0 0$14 ) ;
3907: LD_ADDR_VAR 0 1
3911: PUSH
3912: LD_INT 35
3914: PPUSH
3915: LD_INT 490
3917: PPUSH
3918: CALL_OW 12
3922: ST_TO_ADDR
// wait ( time ) ;
3923: LD_VAR 0 1
3927: PPUSH
3928: CALL_OW 67
// CreateResourcesArea ( Mat_oil , 2 , TopLOil , true ) ;
3932: LD_INT 2
3934: PPUSH
3935: LD_INT 2
3937: PPUSH
3938: LD_INT 15
3940: PPUSH
3941: LD_INT 1
3943: PPUSH
3944: CALL_OW 59
// CreateResourcesArea ( Mat_oil , 2 , BotROil , true ) ;
3948: LD_INT 2
3950: PPUSH
3951: LD_INT 2
3953: PPUSH
3954: LD_INT 19
3956: PPUSH
3957: LD_INT 1
3959: PPUSH
3960: CALL_OW 59
// CreateResourcesArea ( Mat_oil , 2 , TopROil , true ) ;
3964: LD_INT 2
3966: PPUSH
3967: LD_INT 2
3969: PPUSH
3970: LD_INT 18
3972: PPUSH
3973: LD_INT 1
3975: PPUSH
3976: CALL_OW 59
// CreateResourcesArea ( Mat_oil , 2 , BotLOil , true ) ;
3980: LD_INT 2
3982: PPUSH
3983: LD_INT 2
3985: PPUSH
3986: LD_INT 16
3988: PPUSH
3989: LD_INT 1
3991: PPUSH
3992: CALL_OW 59
// wait ( 0 0$15 - time ) ;
3996: LD_INT 525
3998: PUSH
3999: LD_VAR 0 1
4003: MINUS
4004: PPUSH
4005: CALL_OW 67
// enable ;
4009: ENABLE
// end ;
4010: PPOPN 1
4012: END
// every 2 2$30 do var time , skill , id ;
4013: GO 4015
4015: DISABLE
4016: LD_INT 0
4018: PPUSH
4019: PPUSH
4020: PPUSH
// begin skill = ( waves / 7 ) mod 11 ;
4021: LD_ADDR_VAR 0 2
4025: PUSH
4026: LD_EXP 1
4030: PUSH
4031: LD_INT 7
4033: DIVREAL
4034: PUSH
4035: LD_INT 11
4037: MOD
4038: ST_TO_ADDR
// time = rand ( 0 0$01 , 0 0$14 ) ;
4039: LD_ADDR_VAR 0 1
4043: PUSH
4044: LD_INT 35
4046: PPUSH
4047: LD_INT 490
4049: PPUSH
4050: CALL_OW 12
4054: ST_TO_ADDR
// wait ( time ) ;
4055: LD_VAR 0 1
4059: PPUSH
4060: CALL_OW 67
// uc_side = 0 ;
4064: LD_ADDR_OWVAR 20
4068: PUSH
4069: LD_INT 0
4071: ST_TO_ADDR
// uc_nation = 0 ;
4072: LD_ADDR_OWVAR 21
4076: PUSH
4077: LD_INT 0
4079: ST_TO_ADDR
// hc_class = 12 ;
4080: LD_ADDR_OWVAR 28
4084: PUSH
4085: LD_INT 12
4087: ST_TO_ADDR
// hc_skills = [ skill , skill , skill , skill ] ;
4088: LD_ADDR_OWVAR 31
4092: PUSH
4093: LD_VAR 0 2
4097: PUSH
4098: LD_VAR 0 2
4102: PUSH
4103: LD_VAR 0 2
4107: PUSH
4108: LD_VAR 0 2
4112: PUSH
4113: EMPTY
4114: LIST
4115: LIST
4116: LIST
4117: LIST
4118: ST_TO_ADDR
// hc_name =  ;
4119: LD_ADDR_OWVAR 26
4123: PUSH
4124: LD_STRING 
4126: ST_TO_ADDR
// id = createhuman ;
4127: LD_ADDR_VAR 0 3
4131: PUSH
4132: CALL_OW 44
4136: ST_TO_ADDR
// PlaceUnitArea ( id , ApeTop , false ) ;
4137: LD_VAR 0 3
4141: PPUSH
4142: LD_INT 28
4144: PPUSH
4145: LD_INT 0
4147: PPUSH
4148: CALL_OW 49
// id = createhuman ;
4152: LD_ADDR_VAR 0 3
4156: PUSH
4157: CALL_OW 44
4161: ST_TO_ADDR
// PlaceUnitArea ( id , ApeBot , false ) ;
4162: LD_VAR 0 3
4166: PPUSH
4167: LD_INT 29
4169: PPUSH
4170: LD_INT 0
4172: PPUSH
4173: CALL_OW 49
// wait ( 0 0$15 - time ) ;
4177: LD_INT 525
4179: PUSH
4180: LD_VAR 0 1
4184: MINUS
4185: PPUSH
4186: CALL_OW 67
// enable ;
4190: ENABLE
// end ;
4191: PPOPN 3
4193: END
// every 0 0$05 do var i , id , labs , l , ape , sci ;
4194: GO 4196
4196: DISABLE
4197: LD_INT 0
4199: PPUSH
4200: PPUSH
4201: PPUSH
4202: PPUSH
4203: PPUSH
4204: PPUSH
// begin if GetMultiplayerSetting ( 16 ) = 1 then
4205: LD_INT 16
4207: PPUSH
4208: CALL_OW 426
4212: PUSH
4213: LD_INT 1
4215: EQUAL
4216: IFFALSE 4220
// exit ;
4218: GO 4648
// ape = 0 ;
4220: LD_ADDR_VAR 0 5
4224: PUSH
4225: LD_INT 0
4227: ST_TO_ADDR
// sci = 0 ;
4228: LD_ADDR_VAR 0 6
4232: PUSH
4233: LD_INT 0
4235: ST_TO_ADDR
// labs = [ ] ;
4236: LD_ADDR_VAR 0 3
4240: PUSH
4241: EMPTY
4242: ST_TO_ADDR
// for i = 1 to playersides do
4243: LD_ADDR_VAR 0 1
4247: PUSH
4248: DOUBLE
4249: LD_INT 1
4251: DEC
4252: ST_TO_ADDR
4253: LD_EXP 4
4257: PUSH
4258: FOR_TO
4259: IFFALSE 4340
// labs = labs ^ FilterAllUnits ( [ [ f_side , playersides [ i ] ] , [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] , [ f_btype , b_lab_full ] ] ] ) ;
4261: LD_ADDR_VAR 0 3
4265: PUSH
4266: LD_VAR 0 3
4270: PUSH
4271: LD_INT 22
4273: PUSH
4274: LD_EXP 4
4278: PUSH
4279: LD_VAR 0 1
4283: ARRAY
4284: PUSH
4285: EMPTY
4286: LIST
4287: LIST
4288: PUSH
4289: LD_INT 2
4291: PUSH
4292: LD_INT 30
4294: PUSH
4295: LD_INT 6
4297: PUSH
4298: EMPTY
4299: LIST
4300: LIST
4301: PUSH
4302: LD_INT 30
4304: PUSH
4305: LD_INT 7
4307: PUSH
4308: EMPTY
4309: LIST
4310: LIST
4311: PUSH
4312: LD_INT 30
4314: PUSH
4315: LD_INT 8
4317: PUSH
4318: EMPTY
4319: LIST
4320: LIST
4321: PUSH
4322: EMPTY
4323: LIST
4324: LIST
4325: LIST
4326: LIST
4327: PUSH
4328: EMPTY
4329: LIST
4330: LIST
4331: PPUSH
4332: CALL_OW 69
4336: ADD
4337: ST_TO_ADDR
4338: GO 4258
4340: POP
4341: POP
// if labs then
4342: LD_VAR 0 3
4346: IFFALSE 4647
// for i = 1 to labs do
4348: LD_ADDR_VAR 0 1
4352: PUSH
4353: DOUBLE
4354: LD_INT 1
4356: DEC
4357: ST_TO_ADDR
4358: LD_VAR 0 3
4362: PUSH
4363: FOR_TO
4364: IFFALSE 4645
// if UnitsInside ( labs [ i ] ) then
4366: LD_VAR 0 3
4370: PUSH
4371: LD_VAR 0 1
4375: ARRAY
4376: PPUSH
4377: CALL_OW 313
4381: IFFALSE 4643
// begin id = UnitsInside ( labs [ i ] ) ;
4383: LD_ADDR_VAR 0 2
4387: PUSH
4388: LD_VAR 0 3
4392: PUSH
4393: LD_VAR 0 1
4397: ARRAY
4398: PPUSH
4399: CALL_OW 313
4403: ST_TO_ADDR
// ape = 0 ;
4404: LD_ADDR_VAR 0 5
4408: PUSH
4409: LD_INT 0
4411: ST_TO_ADDR
// sci = 0 ;
4412: LD_ADDR_VAR 0 6
4416: PUSH
4417: LD_INT 0
4419: ST_TO_ADDR
// for l = 1 to id do
4420: LD_ADDR_VAR 0 4
4424: PUSH
4425: DOUBLE
4426: LD_INT 1
4428: DEC
4429: ST_TO_ADDR
4430: LD_VAR 0 2
4434: PUSH
4435: FOR_TO
4436: IFFALSE 4510
// begin if GetClass ( id [ l ] ) = 12 then
4438: LD_VAR 0 2
4442: PUSH
4443: LD_VAR 0 4
4447: ARRAY
4448: PPUSH
4449: CALL_OW 257
4453: PUSH
4454: LD_INT 12
4456: EQUAL
4457: IFFALSE 4473
// ape = ape + 1 ;
4459: LD_ADDR_VAR 0 5
4463: PUSH
4464: LD_VAR 0 5
4468: PUSH
4469: LD_INT 1
4471: PLUS
4472: ST_TO_ADDR
// if GetClass ( id [ l ] ) = 4 then
4473: LD_VAR 0 2
4477: PUSH
4478: LD_VAR 0 4
4482: ARRAY
4483: PPUSH
4484: CALL_OW 257
4488: PUSH
4489: LD_INT 4
4491: EQUAL
4492: IFFALSE 4508
// sci = sci + 1 ;
4494: LD_ADDR_VAR 0 6
4498: PUSH
4499: LD_VAR 0 6
4503: PUSH
4504: LD_INT 1
4506: PLUS
4507: ST_TO_ADDR
// end ;
4508: GO 4435
4510: POP
4511: POP
// if ape > 0 and sci > 0 then
4512: LD_VAR 0 5
4516: PUSH
4517: LD_INT 0
4519: GREATER
4520: PUSH
4521: LD_VAR 0 6
4525: PUSH
4526: LD_INT 0
4528: GREATER
4529: AND
4530: IFFALSE 4643
// if mp_game_type = 1 then
4532: LD_OWVAR 6
4536: PUSH
4537: LD_INT 1
4539: EQUAL
4540: IFFALSE 4643
// cureteam = Replace ( cureteam , mp_sides_teams [ getSide ( labs [ i ] ) ] , cureteam [ mp_sides_teams [ getSide ( labs [ i ] ) ] ] + 0 - 10 * ( sci - ape ) + 10 * ( sci + ape ) ) ;
4542: LD_ADDR_EXP 10
4546: PUSH
4547: LD_EXP 10
4551: PPUSH
4552: LD_OWVAR 15
4556: PUSH
4557: LD_VAR 0 3
4561: PUSH
4562: LD_VAR 0 1
4566: ARRAY
4567: PPUSH
4568: CALL_OW 255
4572: ARRAY
4573: PPUSH
4574: LD_EXP 10
4578: PUSH
4579: LD_OWVAR 15
4583: PUSH
4584: LD_VAR 0 3
4588: PUSH
4589: LD_VAR 0 1
4593: ARRAY
4594: PPUSH
4595: CALL_OW 255
4599: ARRAY
4600: ARRAY
4601: PUSH
4602: LD_INT 0
4604: PLUS
4605: PUSH
4606: LD_INT 10
4608: PUSH
4609: LD_VAR 0 6
4613: PUSH
4614: LD_VAR 0 5
4618: MINUS
4619: MUL
4620: MINUS
4621: PUSH
4622: LD_INT 10
4624: PUSH
4625: LD_VAR 0 6
4629: PUSH
4630: LD_VAR 0 5
4634: PLUS
4635: MUL
4636: PLUS
4637: PPUSH
4638: CALL_OW 1
4642: ST_TO_ADDR
// end ;
4643: GO 4363
4645: POP
4646: POP
// enable ;
4647: ENABLE
// end ;
4648: PPOPN 6
4650: END
// every 0 0$01 do var a1 , i ;
4651: GO 4653
4653: DISABLE
4654: LD_INT 0
4656: PPUSH
4657: PPUSH
// begin a1 = FilterAllUnits ( [ f_side , freesides [ 1 ] ] ) ;
4658: LD_ADDR_VAR 0 1
4662: PUSH
4663: LD_INT 22
4665: PUSH
4666: LD_EXP 3
4670: PUSH
4671: LD_INT 1
4673: ARRAY
4674: PUSH
4675: EMPTY
4676: LIST
4677: LIST
4678: PPUSH
4679: CALL_OW 69
4683: ST_TO_ADDR
// for i = 1 to a1 do
4684: LD_ADDR_VAR 0 2
4688: PUSH
4689: DOUBLE
4690: LD_INT 1
4692: DEC
4693: ST_TO_ADDR
4694: LD_VAR 0 1
4698: PUSH
4699: FOR_TO
4700: IFFALSE 4740
// if getLives ( a1 [ i ] ) < 160 then
4702: LD_VAR 0 1
4706: PUSH
4707: LD_VAR 0 2
4711: ARRAY
4712: PPUSH
4713: CALL_OW 256
4717: PUSH
4718: LD_INT 160
4720: LESS
4721: IFFALSE 4738
// DestroyUnit ( a1 [ i ] ) ;
4723: LD_VAR 0 1
4727: PUSH
4728: LD_VAR 0 2
4732: ARRAY
4733: PPUSH
4734: CALL_OW 65
4738: GO 4699
4740: POP
4741: POP
// for i = 1 to a1 do
4742: LD_ADDR_VAR 0 2
4746: PUSH
4747: DOUBLE
4748: LD_INT 1
4750: DEC
4751: ST_TO_ADDR
4752: LD_VAR 0 1
4756: PUSH
4757: FOR_TO
4758: IFFALSE 4818
// if getLives ( a1 [ i ] ) > 11 then
4760: LD_VAR 0 1
4764: PUSH
4765: LD_VAR 0 2
4769: ARRAY
4770: PPUSH
4771: CALL_OW 256
4775: PUSH
4776: LD_INT 11
4778: GREATER
4779: IFFALSE 4816
// SetLives ( a1 [ i ] , getLives ( a1 [ i ] ) - 10 ) ;
4781: LD_VAR 0 1
4785: PUSH
4786: LD_VAR 0 2
4790: ARRAY
4791: PPUSH
4792: LD_VAR 0 1
4796: PUSH
4797: LD_VAR 0 2
4801: ARRAY
4802: PPUSH
4803: CALL_OW 256
4807: PUSH
4808: LD_INT 10
4810: MINUS
4811: PPUSH
4812: CALL_OW 234
4816: GO 4757
4818: POP
4819: POP
// enable ;
4820: ENABLE
// end ;
4821: PPOPN 2
4823: END
// every 0 0$01 do var p1 , a1 , p2 , a2 , i , l ;
4824: GO 4826
4826: DISABLE
4827: LD_INT 0
4829: PPUSH
4830: PPUSH
4831: PPUSH
4832: PPUSH
4833: PPUSH
4834: PPUSH
// begin repeat wait ( 0 0$01 ) ;
4835: LD_INT 35
4837: PPUSH
4838: CALL_OW 67
// p1 = FilterAllUnits ( [ f_side , 0 ] ) ;
4842: LD_ADDR_VAR 0 1
4846: PUSH
4847: LD_INT 22
4849: PUSH
4850: LD_INT 0
4852: PUSH
4853: EMPTY
4854: LIST
4855: LIST
4856: PPUSH
4857: CALL_OW 69
4861: ST_TO_ADDR
// for l = 1 to playersides do
4862: LD_ADDR_VAR 0 6
4866: PUSH
4867: DOUBLE
4868: LD_INT 1
4870: DEC
4871: ST_TO_ADDR
4872: LD_EXP 4
4876: PUSH
4877: FOR_TO
4878: IFFALSE 4916
// p1 = FilterAllUnits ( [ f_side , playersides [ l ] ] ) ^ p1 ;
4880: LD_ADDR_VAR 0 1
4884: PUSH
4885: LD_INT 22
4887: PUSH
4888: LD_EXP 4
4892: PUSH
4893: LD_VAR 0 6
4897: ARRAY
4898: PUSH
4899: EMPTY
4900: LIST
4901: LIST
4902: PPUSH
4903: CALL_OW 69
4907: PUSH
4908: LD_VAR 0 1
4912: ADD
4913: ST_TO_ADDR
4914: GO 4877
4916: POP
4917: POP
// a1 = FilterAllUnits ( [ f_side , freesides [ 1 ] ] ) ;
4918: LD_ADDR_VAR 0 2
4922: PUSH
4923: LD_INT 22
4925: PUSH
4926: LD_EXP 3
4930: PUSH
4931: LD_INT 1
4933: ARRAY
4934: PUSH
4935: EMPTY
4936: LIST
4937: LIST
4938: PPUSH
4939: CALL_OW 69
4943: ST_TO_ADDR
// for i in a1 do
4944: LD_ADDR_VAR 0 5
4948: PUSH
4949: LD_VAR 0 2
4953: PUSH
4954: FOR_IN
4955: IFFALSE 4983
// ComAttackUnit ( i , NearestUnitToUnit ( p1 , i ) ) ;
4957: LD_VAR 0 5
4961: PPUSH
4962: LD_VAR 0 1
4966: PPUSH
4967: LD_VAR 0 5
4971: PPUSH
4972: CALL_OW 74
4976: PPUSH
4977: CALL_OW 115
4981: GO 4954
4983: POP
4984: POP
// until a1 = 100000 end ;
4985: LD_VAR 0 2
4989: PUSH
4990: LD_INT 100000
4992: EQUAL
4993: IFFALSE 4835
4995: PPOPN 6
4997: END
// export function ShowTimer ; var AllStrings , ExtraStrings , i ; begin
4998: LD_INT 0
5000: PPUSH
5001: PPUSH
5002: PPUSH
5003: PPUSH
// if timer <= 0 then
5004: LD_EXP 2
5008: PUSH
5009: LD_INT 0
5011: LESSEQUAL
5012: IFFALSE 5022
// timer = 30 ;
5014: LD_ADDR_EXP 2
5018: PUSH
5019: LD_INT 30
5021: ST_TO_ADDR
// timer = timer - 1 ;
5022: LD_ADDR_EXP 2
5026: PUSH
5027: LD_EXP 2
5031: PUSH
5032: LD_INT 1
5034: MINUS
5035: ST_TO_ADDR
// AllStrings := [ #timer , tick ] ;
5036: LD_ADDR_VAR 0 2
5040: PUSH
5041: LD_STRING #timer
5043: PUSH
5044: LD_OWVAR 1
5048: PUSH
5049: EMPTY
5050: LIST
5051: LIST
5052: ST_TO_ADDR
// ExtraStrings := [ #wave , waves ] ^  ^ [ #newwave , timer ] ;
5053: LD_ADDR_VAR 0 3
5057: PUSH
5058: LD_STRING #wave
5060: PUSH
5061: LD_EXP 1
5065: PUSH
5066: EMPTY
5067: LIST
5068: LIST
5069: PUSH
5070: LD_STRING 
5072: ADD
5073: PUSH
5074: LD_STRING #newwave
5076: PUSH
5077: LD_EXP 2
5081: PUSH
5082: EMPTY
5083: LIST
5084: LIST
5085: ADD
5086: ST_TO_ADDR
// if mp_game_type = 1 and GetMultiplayerSetting ( 15 ) = 1 then
5087: LD_OWVAR 6
5091: PUSH
5092: LD_INT 1
5094: EQUAL
5095: PUSH
5096: LD_INT 15
5098: PPUSH
5099: CALL_OW 426
5103: PUSH
5104: LD_INT 1
5106: EQUAL
5107: AND
5108: IFFALSE 5164
// begin ExtraStrings := ExtraStrings ^ [ #cureA , cureteam [ 1 ] ] ;
5110: LD_ADDR_VAR 0 3
5114: PUSH
5115: LD_VAR 0 3
5119: PUSH
5120: LD_STRING #cureA
5122: PUSH
5123: LD_EXP 10
5127: PUSH
5128: LD_INT 1
5130: ARRAY
5131: PUSH
5132: EMPTY
5133: LIST
5134: LIST
5135: ADD
5136: ST_TO_ADDR
// ExtraStrings := ExtraStrings ^ [ #cureB , cureteam [ 2 ] ] ;
5137: LD_ADDR_VAR 0 3
5141: PUSH
5142: LD_VAR 0 3
5146: PUSH
5147: LD_STRING #cureB
5149: PUSH
5150: LD_EXP 10
5154: PUSH
5155: LD_INT 2
5157: ARRAY
5158: PUSH
5159: EMPTY
5160: LIST
5161: LIST
5162: ADD
5163: ST_TO_ADDR
// end ; if ( ExtraStrings ) then
5164: LD_VAR 0 3
5168: IFFALSE 5190
// AllStrings := AllStrings ^  ^ ExtraStrings ;
5170: LD_ADDR_VAR 0 2
5174: PUSH
5175: LD_VAR 0 2
5179: PUSH
5180: LD_STRING 
5182: ADD
5183: PUSH
5184: LD_VAR 0 3
5188: ADD
5189: ST_TO_ADDR
// Display_Strings := AllStrings ;
5190: LD_ADDR_OWVAR 47
5194: PUSH
5195: LD_VAR 0 2
5199: ST_TO_ADDR
// end ;
5200: LD_VAR 0 1
5204: RET
// every 0 0$1 do
5205: GO 5207
5207: DISABLE
// begin ShowTimer ;
5208: CALL 4998 0 0
// enable ;
5212: ENABLE
// end ;
5213: END
// on BuildingComplete ( b ) do begin if GetBType ( b ) = b_depot then
5214: LD_VAR 0 1
5218: PPUSH
5219: CALL_OW 266
5223: PUSH
5224: LD_INT 0
5226: EQUAL
5227: IFFALSE 5356
// if firstres [ getSide ( b ) ] = 1 then
5229: LD_EXP 11
5233: PUSH
5234: LD_VAR 0 1
5238: PPUSH
5239: CALL_OW 255
5243: ARRAY
5244: PUSH
5245: LD_INT 1
5247: EQUAL
5248: IFFALSE 5356
// begin SetResourceType ( GetBase ( b ) , 1 , GetResourceType ( GetBase ( b ) , 1 ) + 300 ) ;
5250: LD_VAR 0 1
5254: PPUSH
5255: CALL_OW 274
5259: PPUSH
5260: LD_INT 1
5262: PPUSH
5263: LD_VAR 0 1
5267: PPUSH
5268: CALL_OW 274
5272: PPUSH
5273: LD_INT 1
5275: PPUSH
5276: CALL_OW 275
5280: PUSH
5281: LD_INT 300
5283: PLUS
5284: PPUSH
5285: CALL_OW 277
// SetResourceType ( GetBase ( b ) , 2 , GetResourceType ( GetBase ( b ) , 2 ) + 240 ) ;
5289: LD_VAR 0 1
5293: PPUSH
5294: CALL_OW 274
5298: PPUSH
5299: LD_INT 2
5301: PPUSH
5302: LD_VAR 0 1
5306: PPUSH
5307: CALL_OW 274
5311: PPUSH
5312: LD_INT 2
5314: PPUSH
5315: CALL_OW 275
5319: PUSH
5320: LD_INT 240
5322: PLUS
5323: PPUSH
5324: CALL_OW 277
// firstres = replace ( firstres , getSide ( b ) , 0 ) ;
5328: LD_ADDR_EXP 11
5332: PUSH
5333: LD_EXP 11
5337: PPUSH
5338: LD_VAR 0 1
5342: PPUSH
5343: CALL_OW 255
5347: PPUSH
5348: LD_INT 0
5350: PPUSH
5351: CALL_OW 1
5355: ST_TO_ADDR
// end ; end ;
5356: PPOPN 1
5358: END
// on StartHeal ( target , sci ) do begin if mp_sides_teams [ getSide ( sci ) ] = 1 then
5359: LD_OWVAR 15
5363: PUSH
5364: LD_VAR 0 2
5368: PPUSH
5369: CALL_OW 255
5373: ARRAY
5374: PUSH
5375: LD_INT 1
5377: EQUAL
5378: IFFALSE 5434
// if cureteam [ 1 ] >= 10000 then
5380: LD_EXP 10
5384: PUSH
5385: LD_INT 1
5387: ARRAY
5388: PUSH
5389: LD_INT 10000
5391: GREATEREQUAL
5392: IFFALSE 5434
// if getside ( target ) = freesides [ 1 ] then
5394: LD_VAR 0 1
5398: PPUSH
5399: CALL_OW 255
5403: PUSH
5404: LD_EXP 3
5408: PUSH
5409: LD_INT 1
5411: ARRAY
5412: EQUAL
5413: IFFALSE 5434
// setside ( target , getside ( sci ) ) ;
5415: LD_VAR 0 1
5419: PPUSH
5420: LD_VAR 0 2
5424: PPUSH
5425: CALL_OW 255
5429: PPUSH
5430: CALL_OW 235
// if mp_sides_teams [ getSide ( sci ) ] = 2 then
5434: LD_OWVAR 15
5438: PUSH
5439: LD_VAR 0 2
5443: PPUSH
5444: CALL_OW 255
5448: ARRAY
5449: PUSH
5450: LD_INT 2
5452: EQUAL
5453: IFFALSE 5509
// if cureteam [ 2 ] >= 10000 then
5455: LD_EXP 10
5459: PUSH
5460: LD_INT 2
5462: ARRAY
5463: PUSH
5464: LD_INT 10000
5466: GREATEREQUAL
5467: IFFALSE 5509
// if getside ( target ) = freesides [ 1 ] then
5469: LD_VAR 0 1
5473: PPUSH
5474: CALL_OW 255
5478: PUSH
5479: LD_EXP 3
5483: PUSH
5484: LD_INT 1
5486: ARRAY
5487: EQUAL
5488: IFFALSE 5509
// setside ( target , getside ( sci ) ) ;
5490: LD_VAR 0 1
5494: PPUSH
5495: LD_VAR 0 2
5499: PPUSH
5500: CALL_OW 255
5504: PPUSH
5505: CALL_OW 235
// end ;
5509: PPOPN 2
5511: END
// on UnitDestroyed ( u ) do var i , k ;
5512: LD_INT 0
5514: PPUSH
5515: PPUSH
// begin if GetType ( u ) = unit_human then
5516: LD_VAR 0 1
5520: PPUSH
5521: CALL_OW 247
5525: PUSH
5526: LD_INT 1
5528: EQUAL
5529: IFFALSE 5778
// if GetClass ( u ) = 12 and GetMultiplayerSetting ( 14 ) = 0 then
5531: LD_VAR 0 1
5535: PPUSH
5536: CALL_OW 257
5540: PUSH
5541: LD_INT 12
5543: EQUAL
5544: PUSH
5545: LD_INT 14
5547: PPUSH
5548: CALL_OW 426
5552: PUSH
5553: LD_INT 0
5555: EQUAL
5556: AND
5557: IFFALSE 5563
// exit else
5559: GO 5778
5561: GO 5778
// for i = 1 to playersides do
5563: LD_ADDR_VAR 0 2
5567: PUSH
5568: DOUBLE
5569: LD_INT 1
5571: DEC
5572: ST_TO_ADDR
5573: LD_EXP 4
5577: PUSH
5578: FOR_TO
5579: IFFALSE 5776
// if GetSide ( u ) = playersides [ i ] then
5581: LD_VAR 0 1
5585: PPUSH
5586: CALL_OW 255
5590: PUSH
5591: LD_EXP 4
5595: PUSH
5596: LD_VAR 0 2
5600: ARRAY
5601: EQUAL
5602: IFFALSE 5774
// begin if GetClass ( u ) = 12 then
5604: LD_VAR 0 1
5608: PPUSH
5609: CALL_OW 257
5613: PUSH
5614: LD_INT 12
5616: EQUAL
5617: IFFALSE 5710
// begin if GetMultiplayerSetting ( 14 ) = 2 then
5619: LD_INT 14
5621: PPUSH
5622: CALL_OW 426
5626: PUSH
5627: LD_INT 2
5629: EQUAL
5630: IFFALSE 5669
// apequeue := Replace ( apequeue , i , apequeue [ i ] + 1 ) else
5632: LD_ADDR_EXP 8
5636: PUSH
5637: LD_EXP 8
5641: PPUSH
5642: LD_VAR 0 2
5646: PPUSH
5647: LD_EXP 8
5651: PUSH
5652: LD_VAR 0 2
5656: ARRAY
5657: PUSH
5658: LD_INT 1
5660: PLUS
5661: PPUSH
5662: CALL_OW 1
5666: ST_TO_ADDR
5667: GO 5704
// queue := Replace ( queue , i , queue [ i ] + 1 ) ;
5669: LD_ADDR_EXP 5
5673: PUSH
5674: LD_EXP 5
5678: PPUSH
5679: LD_VAR 0 2
5683: PPUSH
5684: LD_EXP 5
5688: PUSH
5689: LD_VAR 0 2
5693: ARRAY
5694: PUSH
5695: LD_INT 1
5697: PLUS
5698: PPUSH
5699: CALL_OW 1
5703: ST_TO_ADDR
// PrepareRespawn ;
5704: CALL 6268 0 0
// end else
5708: GO 5774
// begin queue := Replace ( queue , i , queue [ i ] + 1 ) ;
5710: LD_ADDR_EXP 5
5714: PUSH
5715: LD_EXP 5
5719: PPUSH
5720: LD_VAR 0 2
5724: PPUSH
5725: LD_EXP 5
5729: PUSH
5730: LD_VAR 0 2
5734: ARRAY
5735: PUSH
5736: LD_INT 1
5738: PLUS
5739: PPUSH
5740: CALL_OW 1
5744: ST_TO_ADDR
// if Multiplayer then
5745: LD_OWVAR 4
5749: IFFALSE 5770
// begin if GetMultiplayerSetting ( 13 ) <> 0 then
5751: LD_INT 13
5753: PPUSH
5754: CALL_OW 426
5758: PUSH
5759: LD_INT 0
5761: NONEQUAL
5762: IFFALSE 5768
// PrepareRespawn ;
5764: CALL 6268 0 0
// end else
5768: GO 5774
// PrepareRespawn ;
5770: CALL 6268 0 0
// end ; end ;
5774: GO 5578
5776: POP
5777: POP
// end ;
5778: PPOPN 3
5780: END
// on UnitGoesToRed ( u ) do var i , a1 ;
5781: LD_INT 0
5783: PPUSH
5784: PPUSH
// begin if getSide ( u ) = 0 then
5785: LD_VAR 0 1
5789: PPUSH
5790: CALL_OW 255
5794: PUSH
5795: LD_INT 0
5797: EQUAL
5798: IFFALSE 5905
// begin a1 = FilterAllUnits ( [ f_side , freesides [ 1 ] ] ) ;
5800: LD_ADDR_VAR 0 3
5804: PUSH
5805: LD_INT 22
5807: PUSH
5808: LD_EXP 3
5812: PUSH
5813: LD_INT 1
5815: ARRAY
5816: PUSH
5817: EMPTY
5818: LIST
5819: LIST
5820: PPUSH
5821: CALL_OW 69
5825: ST_TO_ADDR
// for i in a1 do
5826: LD_ADDR_VAR 0 2
5830: PUSH
5831: LD_VAR 0 3
5835: PUSH
5836: FOR_IN
5837: IFFALSE 5901
// if GetDistUnits ( i , NearestUnitToUnit ( u , i ) ) <= 2 then
5839: LD_VAR 0 2
5843: PPUSH
5844: LD_VAR 0 1
5848: PPUSH
5849: LD_VAR 0 2
5853: PPUSH
5854: CALL_OW 74
5858: PPUSH
5859: CALL_OW 296
5863: PUSH
5864: LD_INT 2
5866: LESSEQUAL
5867: IFFALSE 5899
// begin SetLives ( u , 750 ) ;
5869: LD_VAR 0 1
5873: PPUSH
5874: LD_INT 750
5876: PPUSH
5877: CALL_OW 234
// SetSide ( u , freesides [ 1 ] ) ;
5881: LD_VAR 0 1
5885: PPUSH
5886: LD_EXP 3
5890: PUSH
5891: LD_INT 1
5893: ARRAY
5894: PPUSH
5895: CALL_OW 235
// end ;
5899: GO 5836
5901: POP
5902: POP
// end else
5903: GO 6265
// begin if getSide ( u ) = freesides [ 1 ] then
5905: LD_VAR 0 1
5909: PPUSH
5910: CALL_OW 255
5914: PUSH
5915: LD_EXP 3
5919: PUSH
5920: LD_INT 1
5922: ARRAY
5923: EQUAL
5924: IFFALSE 5928
// exit ;
5926: GO 6265
// if GetMultiplayerSetting ( 17 ) = 0 then
5928: LD_INT 17
5930: PPUSH
5931: CALL_OW 426
5935: PUSH
5936: LD_INT 0
5938: EQUAL
5939: IFFALSE 6104
// if getClass ( u ) = 1 or getClass ( u ) = 2 or getClass ( u ) = 3 or getClass ( u ) = 4 then
5941: LD_VAR 0 1
5945: PPUSH
5946: CALL_OW 257
5950: PUSH
5951: LD_INT 1
5953: EQUAL
5954: PUSH
5955: LD_VAR 0 1
5959: PPUSH
5960: CALL_OW 257
5964: PUSH
5965: LD_INT 2
5967: EQUAL
5968: OR
5969: PUSH
5970: LD_VAR 0 1
5974: PPUSH
5975: CALL_OW 257
5979: PUSH
5980: LD_INT 3
5982: EQUAL
5983: OR
5984: PUSH
5985: LD_VAR 0 1
5989: PPUSH
5990: CALL_OW 257
5994: PUSH
5995: LD_INT 4
5997: EQUAL
5998: OR
5999: IFFALSE 6104
// begin a1 = FilterAllUnits ( [ f_side , freesides [ 1 ] ] ) ;
6001: LD_ADDR_VAR 0 3
6005: PUSH
6006: LD_INT 22
6008: PUSH
6009: LD_EXP 3
6013: PUSH
6014: LD_INT 1
6016: ARRAY
6017: PUSH
6018: EMPTY
6019: LIST
6020: LIST
6021: PPUSH
6022: CALL_OW 69
6026: ST_TO_ADDR
// for i in a1 do
6027: LD_ADDR_VAR 0 2
6031: PUSH
6032: LD_VAR 0 3
6036: PUSH
6037: FOR_IN
6038: IFFALSE 6102
// if GetDistUnits ( i , NearestUnitToUnit ( u , i ) ) <= 2 then
6040: LD_VAR 0 2
6044: PPUSH
6045: LD_VAR 0 1
6049: PPUSH
6050: LD_VAR 0 2
6054: PPUSH
6055: CALL_OW 74
6059: PPUSH
6060: CALL_OW 296
6064: PUSH
6065: LD_INT 2
6067: LESSEQUAL
6068: IFFALSE 6100
// begin SetLives ( u , 550 ) ;
6070: LD_VAR 0 1
6074: PPUSH
6075: LD_INT 550
6077: PPUSH
6078: CALL_OW 234
// SetSide ( u , freesides [ 1 ] ) ;
6082: LD_VAR 0 1
6086: PPUSH
6087: LD_EXP 3
6091: PUSH
6092: LD_INT 1
6094: ARRAY
6095: PPUSH
6096: CALL_OW 235
// end ;
6100: GO 6037
6102: POP
6103: POP
// end ; if GetMultiplayerSetting ( 18 ) = 0 then
6104: LD_INT 18
6106: PPUSH
6107: CALL_OW 426
6111: PUSH
6112: LD_INT 0
6114: EQUAL
6115: IFFALSE 6265
// if getClass ( u ) = 15 or getClass ( u ) = 16 or getClass ( u ) = 12 then
6117: LD_VAR 0 1
6121: PPUSH
6122: CALL_OW 257
6126: PUSH
6127: LD_INT 15
6129: EQUAL
6130: PUSH
6131: LD_VAR 0 1
6135: PPUSH
6136: CALL_OW 257
6140: PUSH
6141: LD_INT 16
6143: EQUAL
6144: OR
6145: PUSH
6146: LD_VAR 0 1
6150: PPUSH
6151: CALL_OW 257
6155: PUSH
6156: LD_INT 12
6158: EQUAL
6159: OR
6160: IFFALSE 6265
// begin a1 = FilterAllUnits ( [ f_side , freesides [ 1 ] ] ) ;
6162: LD_ADDR_VAR 0 3
6166: PUSH
6167: LD_INT 22
6169: PUSH
6170: LD_EXP 3
6174: PUSH
6175: LD_INT 1
6177: ARRAY
6178: PUSH
6179: EMPTY
6180: LIST
6181: LIST
6182: PPUSH
6183: CALL_OW 69
6187: ST_TO_ADDR
// for i in a1 do
6188: LD_ADDR_VAR 0 2
6192: PUSH
6193: LD_VAR 0 3
6197: PUSH
6198: FOR_IN
6199: IFFALSE 6263
// if GetDistUnits ( i , NearestUnitToUnit ( u , i ) ) <= 2 then
6201: LD_VAR 0 2
6205: PPUSH
6206: LD_VAR 0 1
6210: PPUSH
6211: LD_VAR 0 2
6215: PPUSH
6216: CALL_OW 74
6220: PPUSH
6221: CALL_OW 296
6225: PUSH
6226: LD_INT 2
6228: LESSEQUAL
6229: IFFALSE 6261
// begin SetLives ( u , 750 ) ;
6231: LD_VAR 0 1
6235: PPUSH
6236: LD_INT 750
6238: PPUSH
6239: CALL_OW 234
// SetSide ( u , freesides [ 1 ] ) ;
6243: LD_VAR 0 1
6247: PPUSH
6248: LD_EXP 3
6252: PUSH
6253: LD_INT 1
6255: ARRAY
6256: PPUSH
6257: CALL_OW 235
// end ;
6261: GO 6198
6263: POP
6264: POP
// end ; end ; end ;
6265: PPOPN 3
6267: END
// export function PrepareRespawn ; var depots , b , i , k , l , clock , skill ; begin
6268: LD_INT 0
6270: PPUSH
6271: PPUSH
6272: PPUSH
6273: PPUSH
6274: PPUSH
6275: PPUSH
6276: PPUSH
6277: PPUSH
// clock = 2 2$30 ;
6278: LD_ADDR_VAR 0 7
6282: PUSH
6283: LD_INT 5250
6285: ST_TO_ADDR
// if Multiplayer then
6286: LD_OWVAR 4
6290: IFFALSE 6334
// begin if GetMultiplayerSetting ( 13 ) = 1 then
6292: LD_INT 13
6294: PPUSH
6295: CALL_OW 426
6299: PUSH
6300: LD_INT 1
6302: EQUAL
6303: IFFALSE 6313
// clock = 4 4$30 ;
6305: LD_ADDR_VAR 0 7
6309: PUSH
6310: LD_INT 9450
6312: ST_TO_ADDR
// if GetMultiplayerSetting ( 13 ) = 2 then
6313: LD_INT 13
6315: PPUSH
6316: CALL_OW 426
6320: PUSH
6321: LD_INT 2
6323: EQUAL
6324: IFFALSE 6334
// clock = 2 2$00 ;
6326: LD_ADDR_VAR 0 7
6330: PUSH
6331: LD_INT 4200
6333: ST_TO_ADDR
// end ; skill = waves / 7 mod 11 ;
6334: LD_ADDR_VAR 0 8
6338: PUSH
6339: LD_EXP 1
6343: PUSH
6344: LD_INT 7
6346: DIVREAL
6347: PUSH
6348: LD_INT 11
6350: MOD
6351: ST_TO_ADDR
// if waves < 55 then
6352: LD_EXP 1
6356: PUSH
6357: LD_INT 55
6359: LESS
6360: IFFALSE 6370
// skill = 12 ;
6362: LD_ADDR_VAR 0 8
6366: PUSH
6367: LD_INT 12
6369: ST_TO_ADDR
// wait ( clock ) ;
6370: LD_VAR 0 7
6374: PPUSH
6375: CALL_OW 67
// for i = 1 to playersides do
6379: LD_ADDR_VAR 0 4
6383: PUSH
6384: DOUBLE
6385: LD_INT 1
6387: DEC
6388: ST_TO_ADDR
6389: LD_EXP 4
6393: PUSH
6394: FOR_TO
6395: IFFALSE 7024
// if apequeue [ i ] > 0 then
6397: LD_EXP 8
6401: PUSH
6402: LD_VAR 0 4
6406: ARRAY
6407: PUSH
6408: LD_INT 0
6410: GREATER
6411: IFFALSE 6676
// begin depots = FilterAllUnits ( [ [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_side , playersides [ i ] ] ] ) ;
6413: LD_ADDR_VAR 0 2
6417: PUSH
6418: LD_INT 2
6420: PUSH
6421: LD_INT 30
6423: PUSH
6424: LD_INT 0
6426: PUSH
6427: EMPTY
6428: LIST
6429: LIST
6430: PUSH
6431: LD_INT 30
6433: PUSH
6434: LD_INT 1
6436: PUSH
6437: EMPTY
6438: LIST
6439: LIST
6440: PUSH
6441: EMPTY
6442: LIST
6443: LIST
6444: LIST
6445: PUSH
6446: LD_INT 22
6448: PUSH
6449: LD_EXP 4
6453: PUSH
6454: LD_VAR 0 4
6458: ARRAY
6459: PUSH
6460: EMPTY
6461: LIST
6462: LIST
6463: PUSH
6464: EMPTY
6465: LIST
6466: LIST
6467: PPUSH
6468: CALL_OW 69
6472: ST_TO_ADDR
// if depots then
6473: LD_VAR 0 2
6477: IFFALSE 6651
// for l = 1 to apequeue [ i ] do
6479: LD_ADDR_VAR 0 6
6483: PUSH
6484: DOUBLE
6485: LD_INT 1
6487: DEC
6488: ST_TO_ADDR
6489: LD_EXP 8
6493: PUSH
6494: LD_VAR 0 4
6498: ARRAY
6499: PUSH
6500: FOR_TO
6501: IFFALSE 6649
// begin b := depots [ Rand ( 1 , depots ) ] ;
6503: LD_ADDR_VAR 0 3
6507: PUSH
6508: LD_VAR 0 2
6512: PUSH
6513: LD_INT 1
6515: PPUSH
6516: LD_VAR 0 2
6520: PPUSH
6521: CALL_OW 12
6525: ARRAY
6526: ST_TO_ADDR
// uc_side = playersides [ i ] ;
6527: LD_ADDR_OWVAR 20
6531: PUSH
6532: LD_EXP 4
6536: PUSH
6537: LD_VAR 0 4
6541: ARRAY
6542: ST_TO_ADDR
// uc_nation = mp_sides_nations [ playersides [ i ] ] ;
6543: LD_ADDR_OWVAR 21
6547: PUSH
6548: LD_OWVAR 16
6552: PUSH
6553: LD_EXP 4
6557: PUSH
6558: LD_VAR 0 4
6562: ARRAY
6563: ARRAY
6564: ST_TO_ADDR
// hc_name =  ;
6565: LD_ADDR_OWVAR 26
6569: PUSH
6570: LD_STRING 
6572: ST_TO_ADDR
// hc_skills = [ skill , skill , skill , skill ] ;
6573: LD_ADDR_OWVAR 31
6577: PUSH
6578: LD_VAR 0 8
6582: PUSH
6583: LD_VAR 0 8
6587: PUSH
6588: LD_VAR 0 8
6592: PUSH
6593: LD_VAR 0 8
6597: PUSH
6598: EMPTY
6599: LIST
6600: LIST
6601: LIST
6602: LIST
6603: ST_TO_ADDR
// hc_class = 12 ;
6604: LD_ADDR_OWVAR 28
6608: PUSH
6609: LD_INT 12
6611: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , GetX ( b ) , GetY ( b ) , 13 , true ) ;
6612: CALL_OW 44
6616: PPUSH
6617: LD_VAR 0 3
6621: PPUSH
6622: CALL_OW 250
6626: PPUSH
6627: LD_VAR 0 3
6631: PPUSH
6632: CALL_OW 251
6636: PPUSH
6637: LD_INT 13
6639: PPUSH
6640: LD_INT 1
6642: PPUSH
6643: CALL_OW 50
// end ;
6647: GO 6500
6649: POP
6650: POP
// apequeue := Replace ( apequeue , i , 0 ) ;
6651: LD_ADDR_EXP 8
6655: PUSH
6656: LD_EXP 8
6660: PPUSH
6661: LD_VAR 0 4
6665: PPUSH
6666: LD_INT 0
6668: PPUSH
6669: CALL_OW 1
6673: ST_TO_ADDR
// end else
6674: GO 7022
// if queue [ i ] > 0 then
6676: LD_EXP 5
6680: PUSH
6681: LD_VAR 0 4
6685: ARRAY
6686: PUSH
6687: LD_INT 0
6689: GREATER
6690: IFFALSE 7022
// begin depots = FilterAllUnits ( [ [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_side , playersides [ i ] ] ] ) ;
6692: LD_ADDR_VAR 0 2
6696: PUSH
6697: LD_INT 2
6699: PUSH
6700: LD_INT 30
6702: PUSH
6703: LD_INT 0
6705: PUSH
6706: EMPTY
6707: LIST
6708: LIST
6709: PUSH
6710: LD_INT 30
6712: PUSH
6713: LD_INT 1
6715: PUSH
6716: EMPTY
6717: LIST
6718: LIST
6719: PUSH
6720: EMPTY
6721: LIST
6722: LIST
6723: LIST
6724: PUSH
6725: LD_INT 22
6727: PUSH
6728: LD_EXP 4
6732: PUSH
6733: LD_VAR 0 4
6737: ARRAY
6738: PUSH
6739: EMPTY
6740: LIST
6741: LIST
6742: PUSH
6743: EMPTY
6744: LIST
6745: LIST
6746: PPUSH
6747: CALL_OW 69
6751: ST_TO_ADDR
// if depots then
6752: LD_VAR 0 2
6756: IFFALSE 7011
// begin for l = 1 to queue [ i ] do
6758: LD_ADDR_VAR 0 6
6762: PUSH
6763: DOUBLE
6764: LD_INT 1
6766: DEC
6767: ST_TO_ADDR
6768: LD_EXP 5
6772: PUSH
6773: LD_VAR 0 4
6777: ARRAY
6778: PUSH
6779: FOR_TO
6780: IFFALSE 6984
// begin b := depots [ Rand ( 1 , depots ) ] ;
6782: LD_ADDR_VAR 0 3
6786: PUSH
6787: LD_VAR 0 2
6791: PUSH
6792: LD_INT 1
6794: PPUSH
6795: LD_VAR 0 2
6799: PPUSH
6800: CALL_OW 12
6804: ARRAY
6805: ST_TO_ADDR
// uc_side = playersides [ i ] ;
6806: LD_ADDR_OWVAR 20
6810: PUSH
6811: LD_EXP 4
6815: PUSH
6816: LD_VAR 0 4
6820: ARRAY
6821: ST_TO_ADDR
// uc_nation = mp_sides_nations [ playersides [ i ] ] ;
6822: LD_ADDR_OWVAR 21
6826: PUSH
6827: LD_OWVAR 16
6831: PUSH
6832: LD_EXP 4
6836: PUSH
6837: LD_VAR 0 4
6841: ARRAY
6842: ARRAY
6843: ST_TO_ADDR
// hc_name =  ;
6844: LD_ADDR_OWVAR 26
6848: PUSH
6849: LD_STRING 
6851: ST_TO_ADDR
// hc_skills = [ skill * 4 / 5 , skill * 4 / 5 , skill * 4 / 5 , skill * 4 / 5 ] ;
6852: LD_ADDR_OWVAR 31
6856: PUSH
6857: LD_VAR 0 8
6861: PUSH
6862: LD_INT 4
6864: MUL
6865: PUSH
6866: LD_INT 5
6868: DIVREAL
6869: PUSH
6870: LD_VAR 0 8
6874: PUSH
6875: LD_INT 4
6877: MUL
6878: PUSH
6879: LD_INT 5
6881: DIVREAL
6882: PUSH
6883: LD_VAR 0 8
6887: PUSH
6888: LD_INT 4
6890: MUL
6891: PUSH
6892: LD_INT 5
6894: DIVREAL
6895: PUSH
6896: LD_VAR 0 8
6900: PUSH
6901: LD_INT 4
6903: MUL
6904: PUSH
6905: LD_INT 5
6907: DIVREAL
6908: PUSH
6909: EMPTY
6910: LIST
6911: LIST
6912: LIST
6913: LIST
6914: ST_TO_ADDR
// hc_class = Rand ( 1 , 4 ) ;
6915: LD_ADDR_OWVAR 28
6919: PUSH
6920: LD_INT 1
6922: PPUSH
6923: LD_INT 4
6925: PPUSH
6926: CALL_OW 12
6930: ST_TO_ADDR
// hc_sex = Rand ( 1 , 2 ) ;
6931: LD_ADDR_OWVAR 27
6935: PUSH
6936: LD_INT 1
6938: PPUSH
6939: LD_INT 2
6941: PPUSH
6942: CALL_OW 12
6946: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , GetX ( b ) , GetY ( b ) , 13 , true ) ;
6947: CALL_OW 44
6951: PPUSH
6952: LD_VAR 0 3
6956: PPUSH
6957: CALL_OW 250
6961: PPUSH
6962: LD_VAR 0 3
6966: PPUSH
6967: CALL_OW 251
6971: PPUSH
6972: LD_INT 13
6974: PPUSH
6975: LD_INT 1
6977: PPUSH
6978: CALL_OW 50
// end ;
6982: GO 6779
6984: POP
6985: POP
// queue := Replace ( queue , i , 0 ) ;
6986: LD_ADDR_EXP 5
6990: PUSH
6991: LD_EXP 5
6995: PPUSH
6996: LD_VAR 0 4
7000: PPUSH
7001: LD_INT 0
7003: PPUSH
7004: CALL_OW 1
7008: ST_TO_ADDR
// end else
7009: GO 7022
// begin wait ( 1 1$00 ) ;
7011: LD_INT 2100
7013: PPUSH
7014: CALL_OW 67
// PrepareRespawn ;
7018: CALL 6268 0 0
// end ; end ;
7022: GO 6394
7024: POP
7025: POP
// end ;
7026: LD_VAR 0 1
7030: RET
// every 0 0$03 do var i , l , c ;
7031: GO 7033
7033: DISABLE
7034: LD_INT 0
7036: PPUSH
7037: PPUSH
7038: PPUSH
// begin if mp_game_type = 1 then
7039: LD_OWVAR 6
7043: PUSH
7044: LD_INT 1
7046: EQUAL
7047: IFFALSE 7417
// begin l = 0 ;
7049: LD_ADDR_VAR 0 2
7053: PUSH
7054: LD_INT 0
7056: ST_TO_ADDR
// for i = 1 to TeamA do
7057: LD_ADDR_VAR 0 1
7061: PUSH
7062: DOUBLE
7063: LD_INT 1
7065: DEC
7066: ST_TO_ADDR
7067: LD_EXP 6
7071: PUSH
7072: FOR_TO
7073: IFFALSE 7230
// begin if FilterAllUnits ( [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] , [ f_side , TeamA [ i ] ] ] ) = 0 or not MultiplayerSideAlive ( TeamA [ i ] ) then
7075: LD_INT 2
7077: PUSH
7078: LD_INT 30
7080: PUSH
7081: LD_INT 0
7083: PUSH
7084: EMPTY
7085: LIST
7086: LIST
7087: PUSH
7088: LD_INT 30
7090: PUSH
7091: LD_INT 1
7093: PUSH
7094: EMPTY
7095: LIST
7096: LIST
7097: PUSH
7098: LD_INT 22
7100: PUSH
7101: LD_EXP 6
7105: PUSH
7106: LD_VAR 0 1
7110: ARRAY
7111: PUSH
7112: EMPTY
7113: LIST
7114: LIST
7115: PUSH
7116: EMPTY
7117: LIST
7118: LIST
7119: LIST
7120: LIST
7121: PPUSH
7122: CALL_OW 69
7126: PUSH
7127: LD_INT 0
7129: EQUAL
7130: PUSH
7131: LD_EXP 6
7135: PUSH
7136: LD_VAR 0 1
7140: ARRAY
7141: PPUSH
7142: CALL_OW 108
7146: NOT
7147: OR
7148: IFFALSE 7164
// l = l + 1 ;
7150: LD_ADDR_VAR 0 2
7154: PUSH
7155: LD_VAR 0 2
7159: PUSH
7160: LD_INT 1
7162: PLUS
7163: ST_TO_ADDR
// if l = TeamA and mp_sides_teams [ your_side ] = 1 then
7164: LD_VAR 0 2
7168: PUSH
7169: LD_EXP 6
7173: EQUAL
7174: PUSH
7175: LD_OWVAR 15
7179: PUSH
7180: LD_OWVAR 2
7184: ARRAY
7185: PUSH
7186: LD_INT 1
7188: EQUAL
7189: AND
7190: IFFALSE 7196
// begin YouLostInMultiplayer ( ) ;
7192: CALL_OW 107
// end ; if l = TeamA and mp_sides_teams [ your_side ] = 2 then
7196: LD_VAR 0 2
7200: PUSH
7201: LD_EXP 6
7205: EQUAL
7206: PUSH
7207: LD_OWVAR 15
7211: PUSH
7212: LD_OWVAR 2
7216: ARRAY
7217: PUSH
7218: LD_INT 2
7220: EQUAL
7221: AND
7222: IFFALSE 7228
// YouWinInMultiplayer ( ) ;
7224: CALL_OW 106
// end ;
7228: GO 7072
7230: POP
7231: POP
// l = 0 ;
7232: LD_ADDR_VAR 0 2
7236: PUSH
7237: LD_INT 0
7239: ST_TO_ADDR
// for i = 1 to TeamB do
7240: LD_ADDR_VAR 0 1
7244: PUSH
7245: DOUBLE
7246: LD_INT 1
7248: DEC
7249: ST_TO_ADDR
7250: LD_EXP 7
7254: PUSH
7255: FOR_TO
7256: IFFALSE 7413
// begin if FilterAllUnits ( [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] , [ f_side , TeamB [ i ] ] ] ) = 0 or not MultiplayerSideAlive ( TeamB [ i ] ) then
7258: LD_INT 2
7260: PUSH
7261: LD_INT 30
7263: PUSH
7264: LD_INT 0
7266: PUSH
7267: EMPTY
7268: LIST
7269: LIST
7270: PUSH
7271: LD_INT 30
7273: PUSH
7274: LD_INT 1
7276: PUSH
7277: EMPTY
7278: LIST
7279: LIST
7280: PUSH
7281: LD_INT 22
7283: PUSH
7284: LD_EXP 7
7288: PUSH
7289: LD_VAR 0 1
7293: ARRAY
7294: PUSH
7295: EMPTY
7296: LIST
7297: LIST
7298: PUSH
7299: EMPTY
7300: LIST
7301: LIST
7302: LIST
7303: LIST
7304: PPUSH
7305: CALL_OW 69
7309: PUSH
7310: LD_INT 0
7312: EQUAL
7313: PUSH
7314: LD_EXP 7
7318: PUSH
7319: LD_VAR 0 1
7323: ARRAY
7324: PPUSH
7325: CALL_OW 108
7329: NOT
7330: OR
7331: IFFALSE 7347
// l = l + 1 ;
7333: LD_ADDR_VAR 0 2
7337: PUSH
7338: LD_VAR 0 2
7342: PUSH
7343: LD_INT 1
7345: PLUS
7346: ST_TO_ADDR
// if l = TeamB and mp_sides_teams [ your_side ] = 2 then
7347: LD_VAR 0 2
7351: PUSH
7352: LD_EXP 7
7356: EQUAL
7357: PUSH
7358: LD_OWVAR 15
7362: PUSH
7363: LD_OWVAR 2
7367: ARRAY
7368: PUSH
7369: LD_INT 2
7371: EQUAL
7372: AND
7373: IFFALSE 7379
// begin YouLostInMultiplayer ( ) ;
7375: CALL_OW 107
// end ; if l = TeamB and mp_sides_teams [ your_side ] = 1 then
7379: LD_VAR 0 2
7383: PUSH
7384: LD_EXP 7
7388: EQUAL
7389: PUSH
7390: LD_OWVAR 15
7394: PUSH
7395: LD_OWVAR 2
7399: ARRAY
7400: PUSH
7401: LD_INT 1
7403: EQUAL
7404: AND
7405: IFFALSE 7411
// YouWinInMultiplayer ( ) ;
7407: CALL_OW 106
// end ;
7411: GO 7255
7413: POP
7414: POP
// end else
7415: GO 7573
// if mp_game_type = 2 then
7417: LD_OWVAR 6
7421: PUSH
7422: LD_INT 2
7424: EQUAL
7425: IFFALSE 7573
// begin l = 0 ;
7427: LD_ADDR_VAR 0 2
7431: PUSH
7432: LD_INT 0
7434: ST_TO_ADDR
// for i = 1 to playersides do
7435: LD_ADDR_VAR 0 1
7439: PUSH
7440: DOUBLE
7441: LD_INT 1
7443: DEC
7444: ST_TO_ADDR
7445: LD_EXP 4
7449: PUSH
7450: FOR_TO
7451: IFFALSE 7544
// if FilterAllUnits ( [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] , [ f_side , playersides [ i ] ] ] ) = 0 or not MultiplayerSideAlive ( playersides [ i ] ) then
7453: LD_INT 2
7455: PUSH
7456: LD_INT 30
7458: PUSH
7459: LD_INT 0
7461: PUSH
7462: EMPTY
7463: LIST
7464: LIST
7465: PUSH
7466: LD_INT 30
7468: PUSH
7469: LD_INT 1
7471: PUSH
7472: EMPTY
7473: LIST
7474: LIST
7475: PUSH
7476: LD_INT 22
7478: PUSH
7479: LD_EXP 4
7483: PUSH
7484: LD_VAR 0 1
7488: ARRAY
7489: PUSH
7490: EMPTY
7491: LIST
7492: LIST
7493: PUSH
7494: EMPTY
7495: LIST
7496: LIST
7497: LIST
7498: LIST
7499: PPUSH
7500: CALL_OW 69
7504: PUSH
7505: LD_INT 0
7507: EQUAL
7508: PUSH
7509: LD_EXP 4
7513: PUSH
7514: LD_VAR 0 1
7518: ARRAY
7519: PPUSH
7520: CALL_OW 108
7524: NOT
7525: OR
7526: IFFALSE 7542
// l = l + 1 ;
7528: LD_ADDR_VAR 0 2
7532: PUSH
7533: LD_VAR 0 2
7537: PUSH
7538: LD_INT 1
7540: PLUS
7541: ST_TO_ADDR
7542: GO 7450
7544: POP
7545: POP
// if l = playersides then
7546: LD_VAR 0 2
7550: PUSH
7551: LD_EXP 4
7555: EQUAL
7556: IFFALSE 7573
// begin Multiplayer_Loose_Message ( ) ;
7558: CALL_OW 521
// wait ( 0 0$03 ) ;
7562: LD_INT 105
7564: PPUSH
7565: CALL_OW 67
// YouLostInMultiplayer ( ) ;
7569: CALL_OW 107
// end ; end ; if cureteam [ 1 ] >= 10000 and GetMultiplayerSetting ( 15 ) = 1 and mp_game_type = 1 then
7573: LD_EXP 10
7577: PUSH
7578: LD_INT 1
7580: ARRAY
7581: PUSH
7582: LD_INT 10000
7584: GREATEREQUAL
7585: PUSH
7586: LD_INT 15
7588: PPUSH
7589: CALL_OW 426
7593: PUSH
7594: LD_INT 1
7596: EQUAL
7597: AND
7598: PUSH
7599: LD_OWVAR 6
7603: PUSH
7604: LD_INT 1
7606: EQUAL
7607: AND
7608: IFFALSE 7698
// begin for i = 1 to TeamA do
7610: LD_ADDR_VAR 0 1
7614: PUSH
7615: DOUBLE
7616: LD_INT 1
7618: DEC
7619: ST_TO_ADDR
7620: LD_EXP 6
7624: PUSH
7625: FOR_TO
7626: IFFALSE 7652
// if your_side = TeamA [ i ] then
7628: LD_OWVAR 2
7632: PUSH
7633: LD_EXP 6
7637: PUSH
7638: LD_VAR 0 1
7642: ARRAY
7643: EQUAL
7644: IFFALSE 7650
// YouWinInMultiplayer ( ) ;
7646: CALL_OW 106
7650: GO 7625
7652: POP
7653: POP
// for i = 1 to TeamB do
7654: LD_ADDR_VAR 0 1
7658: PUSH
7659: DOUBLE
7660: LD_INT 1
7662: DEC
7663: ST_TO_ADDR
7664: LD_EXP 7
7668: PUSH
7669: FOR_TO
7670: IFFALSE 7696
// if your_side = TeamB [ i ] then
7672: LD_OWVAR 2
7676: PUSH
7677: LD_EXP 7
7681: PUSH
7682: LD_VAR 0 1
7686: ARRAY
7687: EQUAL
7688: IFFALSE 7694
// YouLostInMultiplayer ( ) ;
7690: CALL_OW 107
7694: GO 7669
7696: POP
7697: POP
// end ; if cureteam [ 2 ] >= 10000 and GetMultiplayerSetting ( 15 ) = 1 and mp_game_type = 1 then
7698: LD_EXP 10
7702: PUSH
7703: LD_INT 2
7705: ARRAY
7706: PUSH
7707: LD_INT 10000
7709: GREATEREQUAL
7710: PUSH
7711: LD_INT 15
7713: PPUSH
7714: CALL_OW 426
7718: PUSH
7719: LD_INT 1
7721: EQUAL
7722: AND
7723: PUSH
7724: LD_OWVAR 6
7728: PUSH
7729: LD_INT 1
7731: EQUAL
7732: AND
7733: IFFALSE 7823
// begin for i = 1 to TeamB do
7735: LD_ADDR_VAR 0 1
7739: PUSH
7740: DOUBLE
7741: LD_INT 1
7743: DEC
7744: ST_TO_ADDR
7745: LD_EXP 7
7749: PUSH
7750: FOR_TO
7751: IFFALSE 7777
// if your_side = TeamB [ i ] then
7753: LD_OWVAR 2
7757: PUSH
7758: LD_EXP 7
7762: PUSH
7763: LD_VAR 0 1
7767: ARRAY
7768: EQUAL
7769: IFFALSE 7775
// YouWinInMultiplayer ( ) ;
7771: CALL_OW 106
7775: GO 7750
7777: POP
7778: POP
// for i = 1 to TeamA do
7779: LD_ADDR_VAR 0 1
7783: PUSH
7784: DOUBLE
7785: LD_INT 1
7787: DEC
7788: ST_TO_ADDR
7789: LD_EXP 6
7793: PUSH
7794: FOR_TO
7795: IFFALSE 7821
// if your_side = TeamA [ i ] then
7797: LD_OWVAR 2
7801: PUSH
7802: LD_EXP 6
7806: PUSH
7807: LD_VAR 0 1
7811: ARRAY
7812: EQUAL
7813: IFFALSE 7819
// YouLostInMultiplayer ( ) ;
7815: CALL_OW 107
7819: GO 7794
7821: POP
7822: POP
// end ; enable ;
7823: ENABLE
// end ;
7824: PPOPN 3
7826: END
// every 0 0$05 do var a1 , player , i , l , allResources , crates , sortedCrates , oil , sib , dist ;
7827: GO 7829
7829: DISABLE
7830: LD_INT 0
7832: PPUSH
7833: PPUSH
7834: PPUSH
7835: PPUSH
7836: PPUSH
7837: PPUSH
7838: PPUSH
7839: PPUSH
7840: PPUSH
7841: PPUSH
// begin dist = 9999 ;
7842: LD_ADDR_VAR 0 10
7846: PUSH
7847: LD_INT 9999
7849: ST_TO_ADDR
// sortedcrates = [ ] ;
7850: LD_ADDR_VAR 0 7
7854: PUSH
7855: EMPTY
7856: ST_TO_ADDR
// oil = [ ] ;
7857: LD_ADDR_VAR 0 8
7861: PUSH
7862: EMPTY
7863: ST_TO_ADDR
// sib = [ ] ;
7864: LD_ADDR_VAR 0 9
7868: PUSH
7869: EMPTY
7870: ST_TO_ADDR
// player = FilterAllUnits ( [ f_side , your_side ] ) ;
7871: LD_ADDR_VAR 0 2
7875: PUSH
7876: LD_INT 22
7878: PUSH
7879: LD_OWVAR 2
7883: PUSH
7884: EMPTY
7885: LIST
7886: LIST
7887: PPUSH
7888: CALL_OW 69
7892: ST_TO_ADDR
// if GetMultiplayerSetting ( 19 ) = 1 then
7893: LD_INT 19
7895: PPUSH
7896: CALL_OW 426
7900: PUSH
7901: LD_INT 1
7903: EQUAL
7904: IFFALSE 8087
// begin a1 = FilterAllUnits ( [ f_side , 0 ] ) ;
7906: LD_ADDR_VAR 0 1
7910: PUSH
7911: LD_INT 22
7913: PUSH
7914: LD_INT 0
7916: PUSH
7917: EMPTY
7918: LIST
7919: LIST
7920: PPUSH
7921: CALL_OW 69
7925: ST_TO_ADDR
// if a1 = 0 then
7926: LD_VAR 0 1
7930: PUSH
7931: LD_INT 0
7933: EQUAL
7934: IFFALSE 7946
// SetAreaMapShow ( radar , 0 ) ;
7936: LD_INT 33
7938: PPUSH
7939: LD_INT 0
7941: PPUSH
7942: CALL_OW 424
// for i in a1 do
7946: LD_ADDR_VAR 0 3
7950: PUSH
7951: LD_VAR 0 1
7955: PUSH
7956: FOR_IN
7957: IFFALSE 8085
// for l in player do
7959: LD_ADDR_VAR 0 4
7963: PUSH
7964: LD_VAR 0 2
7968: PUSH
7969: FOR_IN
7970: IFFALSE 8081
// if dist > GetDistUnits ( i , NearestUnitToUnit ( l , i ) ) then
7972: LD_VAR 0 10
7976: PUSH
7977: LD_VAR 0 3
7981: PPUSH
7982: LD_VAR 0 4
7986: PPUSH
7987: LD_VAR 0 3
7991: PPUSH
7992: CALL_OW 74
7996: PPUSH
7997: CALL_OW 296
8001: GREATER
8002: IFFALSE 8079
// begin dist = GetDistUnits ( i , NearestUnitToUnit ( l , i ) ) ;
8004: LD_ADDR_VAR 0 10
8008: PUSH
8009: LD_VAR 0 3
8013: PPUSH
8014: LD_VAR 0 4
8018: PPUSH
8019: LD_VAR 0 3
8023: PPUSH
8024: CALL_OW 74
8028: PPUSH
8029: CALL_OW 296
8033: ST_TO_ADDR
// MoveAreaXY ( radar , getX ( i ) - 2 , getY ( i ) - 5 ) ;
8034: LD_INT 33
8036: PPUSH
8037: LD_VAR 0 3
8041: PPUSH
8042: CALL_OW 250
8046: PUSH
8047: LD_INT 2
8049: MINUS
8050: PPUSH
8051: LD_VAR 0 3
8055: PPUSH
8056: CALL_OW 251
8060: PUSH
8061: LD_INT 5
8063: MINUS
8064: PPUSH
8065: CALL_OW 425
// SetAreaMapShow ( radar , 1 ) ;
8069: LD_INT 33
8071: PPUSH
8072: LD_INT 1
8074: PPUSH
8075: CALL_OW 424
// end ;
8079: GO 7969
8081: POP
8082: POP
8083: GO 7956
8085: POP
8086: POP
// end ; if GetMultiplayerSetting ( 19 ) = 2 or GetMultiplayerSetting ( 19 ) = 3 or GetMultiplayerSetting ( 19 ) = 4 then
8087: LD_INT 19
8089: PPUSH
8090: CALL_OW 426
8094: PUSH
8095: LD_INT 2
8097: EQUAL
8098: PUSH
8099: LD_INT 19
8101: PPUSH
8102: CALL_OW 426
8106: PUSH
8107: LD_INT 3
8109: EQUAL
8110: OR
8111: PUSH
8112: LD_INT 19
8114: PPUSH
8115: CALL_OW 426
8119: PUSH
8120: LD_INT 4
8122: EQUAL
8123: OR
8124: IFFALSE 8425
// begin crates = GetListOfCratesInArea ( Map ) ;
8126: LD_ADDR_VAR 0 6
8130: PUSH
8131: LD_INT 32
8133: PPUSH
8134: CALL_OW 435
8138: ST_TO_ADDR
// l = 1 ;
8139: LD_ADDR_VAR 0 4
8143: PUSH
8144: LD_INT 1
8146: ST_TO_ADDR
// for i = 1 to crates / 2 do
8147: LD_ADDR_VAR 0 3
8151: PUSH
8152: DOUBLE
8153: LD_INT 1
8155: DEC
8156: ST_TO_ADDR
8157: LD_VAR 0 6
8161: PUSH
8162: LD_INT 2
8164: DIVREAL
8165: PUSH
8166: FOR_TO
8167: IFFALSE 8423
// begin if getResourceTypeXY ( crates [ l ] , crates [ l + 1 ] ) = 1 then
8169: LD_VAR 0 6
8173: PUSH
8174: LD_VAR 0 4
8178: ARRAY
8179: PPUSH
8180: LD_VAR 0 6
8184: PUSH
8185: LD_VAR 0 4
8189: PUSH
8190: LD_INT 1
8192: PLUS
8193: ARRAY
8194: PPUSH
8195: CALL_OW 283
8199: PUSH
8200: LD_INT 1
8202: EQUAL
8203: IFFALSE 8261
// sortedCrates = Replace ( sortedCrates , sortedCrates + 1 , [ crates [ l ] , crates [ l + 1 ] ] ) else
8205: LD_ADDR_VAR 0 7
8209: PUSH
8210: LD_VAR 0 7
8214: PPUSH
8215: LD_VAR 0 7
8219: PUSH
8220: LD_INT 1
8222: PLUS
8223: PPUSH
8224: LD_VAR 0 6
8228: PUSH
8229: LD_VAR 0 4
8233: ARRAY
8234: PUSH
8235: LD_VAR 0 6
8239: PUSH
8240: LD_VAR 0 4
8244: PUSH
8245: LD_INT 1
8247: PLUS
8248: ARRAY
8249: PUSH
8250: EMPTY
8251: LIST
8252: LIST
8253: PPUSH
8254: CALL_OW 1
8258: ST_TO_ADDR
8259: GO 8407
// if getResourceTypeXY ( crates [ l ] , crates [ l + 1 ] ) = 2 then
8261: LD_VAR 0 6
8265: PUSH
8266: LD_VAR 0 4
8270: ARRAY
8271: PPUSH
8272: LD_VAR 0 6
8276: PUSH
8277: LD_VAR 0 4
8281: PUSH
8282: LD_INT 1
8284: PLUS
8285: ARRAY
8286: PPUSH
8287: CALL_OW 283
8291: PUSH
8292: LD_INT 2
8294: EQUAL
8295: IFFALSE 8353
// oil = Replace ( oil , oil + 1 , [ crates [ l ] , crates [ l + 1 ] ] ) else
8297: LD_ADDR_VAR 0 8
8301: PUSH
8302: LD_VAR 0 8
8306: PPUSH
8307: LD_VAR 0 8
8311: PUSH
8312: LD_INT 1
8314: PLUS
8315: PPUSH
8316: LD_VAR 0 6
8320: PUSH
8321: LD_VAR 0 4
8325: ARRAY
8326: PUSH
8327: LD_VAR 0 6
8331: PUSH
8332: LD_VAR 0 4
8336: PUSH
8337: LD_INT 1
8339: PLUS
8340: ARRAY
8341: PUSH
8342: EMPTY
8343: LIST
8344: LIST
8345: PPUSH
8346: CALL_OW 1
8350: ST_TO_ADDR
8351: GO 8407
// sib = Replace ( sib , sib + 1 , [ crates [ l ] , crates [ l + 1 ] ] ) ;
8353: LD_ADDR_VAR 0 9
8357: PUSH
8358: LD_VAR 0 9
8362: PPUSH
8363: LD_VAR 0 9
8367: PUSH
8368: LD_INT 1
8370: PLUS
8371: PPUSH
8372: LD_VAR 0 6
8376: PUSH
8377: LD_VAR 0 4
8381: ARRAY
8382: PUSH
8383: LD_VAR 0 6
8387: PUSH
8388: LD_VAR 0 4
8392: PUSH
8393: LD_INT 1
8395: PLUS
8396: ARRAY
8397: PUSH
8398: EMPTY
8399: LIST
8400: LIST
8401: PPUSH
8402: CALL_OW 1
8406: ST_TO_ADDR
// l = l + 2 ;
8407: LD_ADDR_VAR 0 4
8411: PUSH
8412: LD_VAR 0 4
8416: PUSH
8417: LD_INT 2
8419: PLUS
8420: ST_TO_ADDR
// end ;
8421: GO 8166
8423: POP
8424: POP
// end ; if GetMultiplayerSetting ( 19 ) = 2 then
8425: LD_INT 19
8427: PPUSH
8428: CALL_OW 426
8432: PUSH
8433: LD_INT 2
8435: EQUAL
8436: IFFALSE 8593
// begin for i in sortedCrates do
8438: LD_ADDR_VAR 0 3
8442: PUSH
8443: LD_VAR 0 7
8447: PUSH
8448: FOR_IN
8449: IFFALSE 8591
// for l in player do
8451: LD_ADDR_VAR 0 4
8455: PUSH
8456: LD_VAR 0 2
8460: PUSH
8461: FOR_IN
8462: IFFALSE 8587
// if dist > GetDistUnitXY ( l , i [ 1 ] , i [ 2 ] ) then
8464: LD_VAR 0 10
8468: PUSH
8469: LD_VAR 0 4
8473: PPUSH
8474: LD_VAR 0 3
8478: PUSH
8479: LD_INT 1
8481: ARRAY
8482: PPUSH
8483: LD_VAR 0 3
8487: PUSH
8488: LD_INT 2
8490: ARRAY
8491: PPUSH
8492: CALL_OW 297
8496: GREATER
8497: IFFALSE 8585
// begin dist = GetDistUnitXY ( l , i [ 1 ] , i [ 2 ] ) ;
8499: LD_ADDR_VAR 0 10
8503: PUSH
8504: LD_VAR 0 4
8508: PPUSH
8509: LD_VAR 0 3
8513: PUSH
8514: LD_INT 1
8516: ARRAY
8517: PPUSH
8518: LD_VAR 0 3
8522: PUSH
8523: LD_INT 2
8525: ARRAY
8526: PPUSH
8527: CALL_OW 297
8531: ST_TO_ADDR
// SetAreaMapShow ( radar , 0 ) ;
8532: LD_INT 33
8534: PPUSH
8535: LD_INT 0
8537: PPUSH
8538: CALL_OW 424
// MoveAreaXY ( radar , i [ 1 ] - 2 , i [ 2 ] - 5 ) ;
8542: LD_INT 33
8544: PPUSH
8545: LD_VAR 0 3
8549: PUSH
8550: LD_INT 1
8552: ARRAY
8553: PUSH
8554: LD_INT 2
8556: MINUS
8557: PPUSH
8558: LD_VAR 0 3
8562: PUSH
8563: LD_INT 2
8565: ARRAY
8566: PUSH
8567: LD_INT 5
8569: MINUS
8570: PPUSH
8571: CALL_OW 425
// SetAreaMapShow ( radar , 1 ) ;
8575: LD_INT 33
8577: PPUSH
8578: LD_INT 1
8580: PPUSH
8581: CALL_OW 424
// end ;
8585: GO 8461
8587: POP
8588: POP
8589: GO 8448
8591: POP
8592: POP
// end ; if GetMultiplayerSetting ( 19 ) = 3 then
8593: LD_INT 19
8595: PPUSH
8596: CALL_OW 426
8600: PUSH
8601: LD_INT 3
8603: EQUAL
8604: IFFALSE 8761
// begin for i in oil do
8606: LD_ADDR_VAR 0 3
8610: PUSH
8611: LD_VAR 0 8
8615: PUSH
8616: FOR_IN
8617: IFFALSE 8759
// for l in player do
8619: LD_ADDR_VAR 0 4
8623: PUSH
8624: LD_VAR 0 2
8628: PUSH
8629: FOR_IN
8630: IFFALSE 8755
// if dist > GetDistUnitXY ( l , i [ 1 ] , i [ 2 ] ) then
8632: LD_VAR 0 10
8636: PUSH
8637: LD_VAR 0 4
8641: PPUSH
8642: LD_VAR 0 3
8646: PUSH
8647: LD_INT 1
8649: ARRAY
8650: PPUSH
8651: LD_VAR 0 3
8655: PUSH
8656: LD_INT 2
8658: ARRAY
8659: PPUSH
8660: CALL_OW 297
8664: GREATER
8665: IFFALSE 8753
// begin dist = GetDistUnitXY ( l , i [ 1 ] , i [ 2 ] ) ;
8667: LD_ADDR_VAR 0 10
8671: PUSH
8672: LD_VAR 0 4
8676: PPUSH
8677: LD_VAR 0 3
8681: PUSH
8682: LD_INT 1
8684: ARRAY
8685: PPUSH
8686: LD_VAR 0 3
8690: PUSH
8691: LD_INT 2
8693: ARRAY
8694: PPUSH
8695: CALL_OW 297
8699: ST_TO_ADDR
// SetAreaMapShow ( radar , 0 ) ;
8700: LD_INT 33
8702: PPUSH
8703: LD_INT 0
8705: PPUSH
8706: CALL_OW 424
// MoveAreaXY ( radar , i [ 1 ] - 2 , i [ 2 ] - 5 ) ;
8710: LD_INT 33
8712: PPUSH
8713: LD_VAR 0 3
8717: PUSH
8718: LD_INT 1
8720: ARRAY
8721: PUSH
8722: LD_INT 2
8724: MINUS
8725: PPUSH
8726: LD_VAR 0 3
8730: PUSH
8731: LD_INT 2
8733: ARRAY
8734: PUSH
8735: LD_INT 5
8737: MINUS
8738: PPUSH
8739: CALL_OW 425
// SetAreaMapShow ( radar , 1 ) ;
8743: LD_INT 33
8745: PPUSH
8746: LD_INT 1
8748: PPUSH
8749: CALL_OW 424
// end ;
8753: GO 8629
8755: POP
8756: POP
8757: GO 8616
8759: POP
8760: POP
// end ; if GetMultiplayerSetting ( 19 ) = 4 then
8761: LD_INT 19
8763: PPUSH
8764: CALL_OW 426
8768: PUSH
8769: LD_INT 4
8771: EQUAL
8772: IFFALSE 8929
// begin for i in sib do
8774: LD_ADDR_VAR 0 3
8778: PUSH
8779: LD_VAR 0 9
8783: PUSH
8784: FOR_IN
8785: IFFALSE 8927
// for l in player do
8787: LD_ADDR_VAR 0 4
8791: PUSH
8792: LD_VAR 0 2
8796: PUSH
8797: FOR_IN
8798: IFFALSE 8923
// if dist > GetDistUnitXY ( l , i [ 1 ] , i [ 2 ] ) then
8800: LD_VAR 0 10
8804: PUSH
8805: LD_VAR 0 4
8809: PPUSH
8810: LD_VAR 0 3
8814: PUSH
8815: LD_INT 1
8817: ARRAY
8818: PPUSH
8819: LD_VAR 0 3
8823: PUSH
8824: LD_INT 2
8826: ARRAY
8827: PPUSH
8828: CALL_OW 297
8832: GREATER
8833: IFFALSE 8921
// begin dist = GetDistUnitXY ( l , i [ 1 ] , i [ 2 ] ) ;
8835: LD_ADDR_VAR 0 10
8839: PUSH
8840: LD_VAR 0 4
8844: PPUSH
8845: LD_VAR 0 3
8849: PUSH
8850: LD_INT 1
8852: ARRAY
8853: PPUSH
8854: LD_VAR 0 3
8858: PUSH
8859: LD_INT 2
8861: ARRAY
8862: PPUSH
8863: CALL_OW 297
8867: ST_TO_ADDR
// SetAreaMapShow ( radar , 0 ) ;
8868: LD_INT 33
8870: PPUSH
8871: LD_INT 0
8873: PPUSH
8874: CALL_OW 424
// MoveAreaXY ( radar , i [ 1 ] - 2 , i [ 2 ] - 5 ) ;
8878: LD_INT 33
8880: PPUSH
8881: LD_VAR 0 3
8885: PUSH
8886: LD_INT 1
8888: ARRAY
8889: PUSH
8890: LD_INT 2
8892: MINUS
8893: PPUSH
8894: LD_VAR 0 3
8898: PUSH
8899: LD_INT 2
8901: ARRAY
8902: PUSH
8903: LD_INT 5
8905: MINUS
8906: PPUSH
8907: CALL_OW 425
// SetAreaMapShow ( radar , 1 ) ;
8911: LD_INT 33
8913: PPUSH
8914: LD_INT 1
8916: PPUSH
8917: CALL_OW 424
// end ;
8921: GO 8797
8923: POP
8924: POP
8925: GO 8784
8927: POP
8928: POP
// end ; enable ;
8929: ENABLE
// end ;
8930: PPOPN 10
8932: END
